private void doOnMessage(List<?> messages, CometClientTransportWrapper transport) {
   if (transport == primaryTransport) {
     listener.onMessage(messages);
   } else if (RefreshState.PRIMARY_DISCONNECTED.equals(refreshState)) {
     refreshEnqueue(messages);
   }
 }
  @SuppressWarnings("unchecked")
  private void doneRefresh() {
    refreshState = null;
    CometClientTransportWrapper temp = primaryTransport;
    primaryTransport = refreshTransport;
    refreshTransport = temp;

    listener.onAfterRefresh();

    if (refreshQueue != null) {
      if (refreshQueue.size() > 0) {
        GWT.log("CometClient: pushing queued messages");
      }
      for (Object object : refreshQueue) {
        if (object == REFRESH) {
          doOnRefresh(primaryTransport);
        } else if (object == DISCONNECT) {
          doOnDisconnected(primaryTransport);
        } else {
          doOnMessage((List<?>) object, primaryTransport);
        }
      }
      refreshQueue.clear();
    }
  }
  private void doOnError(
      Throwable exception, boolean connected, CometClientTransportWrapper transport) {
    if (connected) {
      doDisconnect();
    }

    listener.onError(exception, connected);

    if (running) {
      primaryTransport.reconnectionTimer.schedule(reconnectionTimeout);
    }
  }
 private void doOnConnected(
     int heartbeat, int connectionID, CometClientTransportWrapper transport) {
   if (refreshState != null) {
     if (transport == refreshTransport) {
       if (refreshState == RefreshState.PRIMARY_DISCONNECTED) {
         doneRefresh();
       } else if (refreshState == RefreshState.CONNECTING) {
         primaryTransport.disconnect();
         doneRefresh();
       } else {
         throw new IllegalStateException("Unexpected refresh state");
       }
     } else {
       // refreshed connection after connection failed
       if (refreshState != RefreshState.CONNECTING) {
         throw new IllegalStateException("Unexpected refresh state");
       }
       refreshState = null;
       listener.onAfterRefresh();
     }
   } else {
     listener.onConnected(heartbeat, connectionID);
   }
 }
  private void doOnRefresh(CometClientTransportWrapper transport) {
    if (refreshState == null && transport == primaryTransport) {
      refreshState = RefreshState.CONNECTING;

      if (refreshTransport == null) {
        refreshTransport = new CometClientTransportWrapper();
      }
      refreshTransport.connect();

      listener.onRefresh();
    } else if (transport == refreshTransport) {
      refreshEnqueue(REFRESH);
    } else {
      throw new IllegalStateException("Unexpected refresh from primaryTransport");
    }
  }
  private void doOnDisconnected(CometClientTransportWrapper transport) {
    if (refreshState != null) {
      if (transport == primaryTransport) {
        if (refreshState != RefreshState.CONNECTING) {
          throw new IllegalStateException("Unexpected refreshState");
        }
        refreshState = RefreshState.PRIMARY_DISCONNECTED;
        GWT.log("CometClient: primary disconnected before refresh transport was connected");
      } else {
        // the refresh transport has disconnected
        failedRefresh();
      }
    } else {
      listener.onDisconnected();

      if (running) {
        doConnect();
      }
    }
  }
 private void doOnHeartbeat(CometClientTransportWrapper transport) {
   if (transport == primaryTransport) {
     listener.onHeartbeat();
   }
 }
 private void doOnBeforeDisconnected(CometClientTransportWrapper transport) {
   if (refreshState == null && transport == primaryTransport) {
     listener.onBeforeDisconnected();
   }
 }