private void onOpen() {
   for (int x = sent; x < requestCounter; x++) {
     WebSocketRequest request = requests.get(x + 1);
     send(requestCounter + ":" + request.getRequest());
     sent++;
   }
   isConnected = true;
 }
 private void onClose() {
   for (WebSocketRequest request : requests.values()) {
     request.getCallback().onError(request, new IOException("Connection lost"));
   }
   requests.clear();
   requestCounter = 0;
   sent = 0;
   // reconnect again
   try {
     this.jsWebSocket = createJSWebSocket(url, this);
   } catch (Exception e) {
   }
 }
  /** @param message */
  private void onMessage(String message) {
    int index = message.indexOf(':');
    try {
      int id = Integer.parseInt(message.substring(0, index));
      message = message.substring(index + 1);

      WebSocketRequest request = requests.get(id);
      if (request != null) {
        requests.remove(id);
        WebSocketResponse respone = new WebSocketResponse(message);

        processCookies(respone);
        request.getCallback().onResponseReceived(request, respone);
      }
    } catch (NumberFormatException e) {

    }
  }
  public void send(WebSocketRequest wsr) {
    requestCounter++;
    requests.put(requestCounter, wsr);
    if (isConnected) {
      String request = wsr.getRequest();

      while (request.length() > MAX_MESSAGE) {
        String substring = request.substring(0, MAX_MESSAGE);
        substring += MESSAGE_END;
        send(requestCounter + ":" + substring);
        request = request.substring(MAX_MESSAGE);
      }
      send(requestCounter + ":" + request);
      sent++;
    }
  }