Esempio n. 1
0
  /**
   * WebSocket 1.0. Section 2.1.5. Need internal close method as spec requires that the local
   * endpoint receives a 1006 on timeout.
   */
  private void doClose(CloseReason closeReasonMessage, CloseReason closeReasonLocal) {
    // Double-checked locking. OK because state is volatile
    if (state != State.OPEN) {
      return;
    }

    synchronized (stateLock) {
      if (state != State.OPEN) {
        return;
      }

      state = State.CLOSING;

      sendCloseMessage(closeReasonMessage);
      fireEndpointOnClose(closeReasonLocal);

      state = State.CLOSED;
    }

    IOException ioe = new IOException(MESSAGES.messageFailed());
    SendResult sr = new SendResult(ioe);
    for (FutureToSendHandler f2sh : futures.keySet()) {
      f2sh.onResult(sr);
    }
  }
Esempio n. 2
0
  /**
   * Called when a close message is received. Should only ever happen once. Also called after a
   * protocol error when the ProtocolHandler needs to force the closing of the connection.
   */
  public void onClose(CloseReason closeReason) {

    synchronized (stateLock) {
      if (state == State.OPEN) {
        sendCloseMessage(closeReason);
        fireEndpointOnClose(closeReason);
        state = State.CLOSED;
      }

      // Close the socket
      wsRemoteEndpoint.close();
    }
  }