/** {@inheritDoc} */
 @Override
 public final void onFailure(Throwable t) {
   for (WebSocketListener listener : listeners) {
     if (!ok.get() && webSocket != null) {
       webSocket.addWebSocketListener(listener);
     }
     listener.onError(t);
   }
 }
 /** {@inheritDoc} */
 @Override
 public final void onSuccess(WebSocket webSocket) {
   this.webSocket = webSocket;
   for (WebSocketListener listener : listeners) {
     webSocket.addWebSocketListener(listener);
     listener.onOpen(webSocket);
   }
   ok.set(true);
 }
 /** {@inheritDoc} */
 @Override
 public final void onSuccess(WebSocket webSocket) {
   this.webSocket = webSocket;
   for (WebSocketListener listener : listeners) {
     webSocket.addWebSocketListener(listener);
     listener.onOpen(webSocket);
   }
   if (isNonEmpty(bufferedFrames)) {
     for (Runnable bufferedFrame : bufferedFrames) {
       bufferedFrame.run();
     }
     bufferedFrames = null;
   }
   ok.set(true);
 }
  public final void onClose(WebSocket webSocket, int status, String reasonPhrase) {
    // Connect failure
    if (this.webSocket == null) this.webSocket = webSocket;

    for (WebSocketListener listener : listeners) {
      if (webSocket != null) {
        webSocket.addWebSocketListener(listener);
      }
      listener.onClose(webSocket);
      if (listener instanceof WebSocketCloseCodeReasonListener) {
        WebSocketCloseCodeReasonListener.class
            .cast(listener)
            .onClose(webSocket, status, reasonPhrase);
      }
    }
  }