package ch.loway.oss.ari4java.tools; import com.fasterxml.jackson.core.type.TypeReference; /** * Delegate for handling asynchronous ARI responses. * * */ public class AriAsyncHandler<T> implements HttpResponseHandler { private final AriCallback<? super T> callback; private Class<T> klazz; private TypeReference<T> klazzType; private long lastResponseTime = 0; public AriAsyncHandler(AriCallback<? super T> callback, Class<T> klazz) { this.callback = callback; this.klazz = klazz; } public AriAsyncHandler(AriCallback<? super T> callback, TypeReference<T> klazzType) { this.callback = callback; this.klazzType = klazzType; } public AriCallback<? super T> getCallback() { return callback; } void handleResponse(String json) { try { T result; if (Void.class.equals(klazz)) { result = null; } else if (klazz != null) { result = BaseAriAction.deserializeJson(json, klazz); } else { result = BaseAriAction.deserializeJson(json, klazzType); } this.callback.onSuccess(result); } catch (RestException e) { this.callback.onFailure(e); } } @Override public void onChReadyToWrite() { lastResponseTime = System.currentTimeMillis(); } @Override public void onResponseReceived() { lastResponseTime = System.currentTimeMillis(); } @Override public void onDisconnect() { // this is from channelInactive on the websocket raise an error so the client can reconnect if need be this.callback.onFailure(new RestException("Asterisk WS is disconnected. Please retry.")); } @Override public void onSuccess(String response) { handleResponse(response); } @Override public void onFailure(Throwable e) { this.callback.onFailure(new RestException(e)); } @Override public long getLastResponseTime() { return lastResponseTime; } } // $Log$ //