package com.github.czyzby.websocket.impl;
import java.util.List;
import java.util.Map;
import com.github.czyzby.websocket.data.WebSocketCloseCode;
import com.neovisionaries.ws.client.WebSocket;
import com.neovisionaries.ws.client.WebSocketAdapter;
import com.neovisionaries.ws.client.WebSocketException;
import com.neovisionaries.ws.client.WebSocketFrame;
/** Adapter for NV web socket listener. Wraps around {@link NvWebSocket}.
*
* @author MJ */
public class NvWebSocketListener extends WebSocketAdapter {
private final NvWebSocket socket;
public NvWebSocketListener(final NvWebSocket socket) {
this.socket = socket;
}
@Override
public void onError(final WebSocket websocket, final WebSocketException cause) throws Exception {
socket.postErrorEvent(cause);
}
@Override
public void onConnected(final WebSocket websocket, final Map<String, List<String>> headers) throws Exception {
socket.postOpenEvent();
}
@Override
public void onDisconnected(final WebSocket websocket, final WebSocketFrame serverCloseFrame,
final WebSocketFrame clientCloseFrame, final boolean closedByServer) throws Exception {
if (closedByServer) {
triggerOnDisconnectEvent(serverCloseFrame.getCloseCode(), serverCloseFrame.getCloseReason());
} else {
triggerOnDisconnectEvent(clientCloseFrame.getCloseCode(), clientCloseFrame.getCloseReason());
}
}
private void triggerOnDisconnectEvent(final int closeCode, final String closeReason) {
socket.postCloseEvent(WebSocketCloseCode.getByCodeOrElse(closeCode, WebSocketCloseCode.ABNORMAL), closeReason);
}
@Override
public void onConnectError(final WebSocket websocket, final WebSocketException exception) throws Exception {
onError(websocket, exception);
}
@Override
public void onTextMessageError(final WebSocket websocket, final WebSocketException cause, final byte[] data)
throws Exception {
onError(websocket, cause);
}
@Override
public void onUnexpectedError(final WebSocket websocket, final WebSocketException cause) throws Exception {
onError(websocket, cause);
}
@Override
public void onBinaryMessage(final WebSocket websocket, final byte[] binary) throws Exception {
if (binary != null && binary.length > 0) {
socket.postMessageEvent(binary);
}
}
@Override
public void onTextMessage(final WebSocket websocket, final String text) throws Exception {
if (text != null && text.length() > 0) {
socket.postMessageEvent(text);
}
}
}