@Override public void onTransportFailure(final IOException error) { mqtt.tracer.debug("Transport failure: %s", error); onFailure(error); }
@Override public void onTransportCommand(Object command) { MQTTFrame frame = (MQTTFrame) command; mqtt.tracer.onReceive(frame); processFrame(frame); } @Override
@Override public void onTransportCommand(Object command) { MQTTFrame response = (MQTTFrame) command; mqtt.tracer.onReceive(response); try { switch (response.messageType()) { switch (connack.code()) { case CONNECTION_ACCEPTED: mqtt.tracer.debug("MQTT login accepted"); onSessionEstablished(transport); cb.onSuccess(null); break; default: mqtt.tracer.debug("MQTT login rejected"); mqtt.tracer.debug("Received unexpected MQTT frame: %d", response.messageType()); mqtt.tracer.debug("Protocol error: %s", e); transport.stop(NOOP); cb.onFailure(e);
private void send(Request request) { if( failure !=null ) { if( request.cb!=null ) { request.cb.onFailure(failure); } } else { // Put the request in the map before sending it over the wire. if(request.id!=0) { this.requests.put(request.id, request); } if( overflow.isEmpty() && transport!=null && transport.offer(request.frame) ) { mqtt.tracer.onSend(request.frame); if(request.id==0) { if( request.cb!=null ) { ((Callback<Void>)request.cb).onSuccess(null); } } } else { // Remove it from the request. this.requests.remove(request.id); overflow.addLast(request); } } }
@Override public void onTransportCommand(Object command) { MQTTFrame response = (MQTTFrame) command; mqtt.tracer.onReceive(response); try { switch (response.messageType()) { switch (connack.code()) { case CONNECTION_ACCEPTED: mqtt.tracer.debug("MQTT login accepted"); onSessionEstablished(transport); cb.onSuccess(null); break; default: mqtt.tracer.debug("MQTT login rejected"); mqtt.tracer.debug("Received unexpected MQTT frame: %d", response.messageType()); mqtt.tracer.debug("Protocol error: %s", e); transport.stop(NOOP); cb.onFailure(e);
while((request=overflow.peek())!=null) { if( this.transport.offer(request.frame) ) { mqtt.tracer.onSend(request.frame); overflow.removeFirst(); if(request.id==0) {
@Override public void onTransportFailure(IOException error) { mqtt.tracer.debug("Transport failure: %s", error); transport.stop(NOOP); onFailure(error); }
MQTTFrame encoded = new PINGREQ().encode(); if(CallbackConnection.this.transport.offer(encoded)) { mqtt.tracer.onSend(encoded); final long now = System.currentTimeMillis(); final long suspends = suspendChanges.get();
@Override public void onTransportCommand(Object command) { MQTTFrame frame = (MQTTFrame) command; mqtt.tracer.onReceive(frame); processFrame(frame); } @Override
@Override public void onTransportConnected() { mqtt.tracer.debug("Transport connected"); if(disconnected) { onFailure(createDisconnectedError()); } else { onConnect.onSuccess(transport); } }
private void send(Request request) { if( failure !=null ) { if( request.cb!=null ) { request.cb.onFailure(failure); } } else { // Put the request in the map before sending it over the wire. if(request.id!=0) { this.requests.put(request.id, request); } if( overflow.isEmpty() && transport!=null && transport.offer(request.frame) ) { mqtt.tracer.onSend(request.frame); if(request.id==0) { if( request.cb!=null ) { ((Callback<Void>)request.cb).onSuccess(null); } } } else { // Remove it from the request. this.requests.remove(request.id); overflow.addLast(request); } } }
public void onSuccess(Void value) { mqtt.tracer.debug("Restoring MQTT connection state"); // Setup a new overflow so that the replay can be sent out before the original overflow list. LinkedList<Request> originalOverflow = overflow; Map<Short, Request> originalRequests = requests; overflow = new LinkedList<Request>(); requests = new ConcurrentHashMap<Short, Request>(); // Restore any active subscriptions. if (!activeSubs.isEmpty()) { ArrayList<Topic> topics = new ArrayList<Topic>(activeSubs.size()); for (Map.Entry<UTF8Buffer, QoS> entry : activeSubs.entrySet()) { topics.add(new Topic(entry.getKey(), entry.getValue())); } send(new SUBSCRIBE().topics(topics.toArray(new Topic[topics.size()])), null); } // Replay any un-acked requests.. for (Map.Entry<Short, Request> entry : originalRequests.entrySet()) { MQTTFrame frame = entry.getValue().frame; frame.dup(true); // set the dup flag as these frames were previously transmitted. send(entry.getValue()); } // Replay the original overflow for (Request request : originalOverflow) { // Stuff in the overflow never got sent out.. so no need to set the dup flag send(request); } }
while((request=overflow.peek())!=null) { if( this.transport.offer(request.frame) ) { mqtt.tracer.onSend(request.frame); overflow.removeFirst(); if(request.id==0) {
private void handleFatalFailure(Throwable error) { if( failure == null ) { failure = error; mqtt.tracer.debug("Fatal connection failure: %s", error); // Fail incomplete requests. ArrayList<Request> values = new ArrayList(requests.values()); requests.clear(); for (Request value : values) { if( value.cb!= null ) { value.cb.onFailure(failure); } } ArrayList<Request> overflowEntries = new ArrayList<Request>(overflow); overflow.clear(); for (Request entry : overflowEntries) { if( entry.cb !=null ) { entry.cb.onFailure(failure); } } if( listener !=null && !disconnected ) { try { listener.onFailure(failure); } catch (Exception e) { Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e); } } } }
MQTTFrame encoded = new PINGREQ().encode(); if(CallbackConnection.this.transport.offer(encoded)) { mqtt.tracer.onSend(encoded); final long now = System.currentTimeMillis(); final long suspends = suspendChanges.get();
void handleSessionFailure(Throwable error) { // Socket failure, should we try to reconnect? if( !disconnected && (mqtt.reconnectAttemptsMax<0 || reconnects < mqtt.reconnectAttemptsMax ) ) { mqtt.tracer.debug("Reconnecting transport"); // Cleanup the previous transport. if(heartBeatMonitor!=null) { heartBeatMonitor.stop(); heartBeatMonitor = null; } final Transport t = transport; transport = null; if(t!=null) { t.stop(new Task() { @Override public void run() { listener.onDisconnected(); reconnect(); } }); } else { reconnect(); } } else { // nope. handleFatalFailure(error); } }
mqtt.tracer.debug("Connecting"); String scheme = mqtt.host.getScheme();
@Override public void onTransportFailure(final IOException error) { mqtt.tracer.debug("Transport failure: %s", error); onFailure(error); }