@Override public void complete(WebSocketChannel channel, BufferedBinaryMessage context) { try { WebSocketFrameType type = messageChannel.getType(); if (!controlFrame) { onFullBinaryMessage(channel, buffer); } else if (type == WebSocketFrameType.PONG) { onFullPongMessage(channel, buffer); } else if (type == WebSocketFrameType.PING) { onFullPingMessage(channel, buffer); } else if (type == WebSocketFrameType.CLOSE) { onFullCloseMessage(channel, buffer); } } catch (IOException e) { AbstractReceiveListener.this.onError(channel, e); } }
@Override public void complete(WebSocketChannel channel, BufferedTextMessage context) { try { onFullTextMessage(channel, textMessage); } catch (IOException e) { AbstractReceiveListener.this.onError(channel, e); } }
@Override public void handleEvent(WebSocketChannel channel) { try { final StreamSourceFrameChannel result = channel.receive(); if (result == null) { return; } else if (result.getType() == WebSocketFrameType.BINARY) { onBinary(channel, result); } else if (result.getType() == WebSocketFrameType.TEXT) { onText(channel, result); } else if (result.getType() == WebSocketFrameType.PONG) { onPong(channel, result); } else if (result.getType() == WebSocketFrameType.PING) { onPing(channel, result); } else if (result.getType() == WebSocketFrameType.CLOSE) { onClose(channel, result); } } catch (IOException e) { onError(channel, e); } }
/** * Utility method that reads a full text or binary message, including all fragmented parts. Once the full message is * read then the {@link #onFullTextMessage(WebSocketChannel, BufferedTextMessage)} or * {@link #onFullBinaryMessage(WebSocketChannel, BufferedBinaryMessage)} method will be invoked. * * @param messageChannel The message channel */ protected final void bufferFullMessage(StreamSourceFrameChannel messageChannel) { if (messageChannel.getType() == WebSocketFrameType.TEXT) { readBufferedText(messageChannel, new BufferedTextMessage(getMaxTextBufferSize(), true)); } else if (messageChannel.getType() == WebSocketFrameType.BINARY) { readBufferedBinary(messageChannel, false, new BufferedBinaryMessage(getMaxBinaryBufferSize(), true)); } else if (messageChannel.getType() == WebSocketFrameType.PONG) { readBufferedBinary(messageChannel, true, new BufferedBinaryMessage(getMaxPongBufferSize(), true)); } else if (messageChannel.getType() == WebSocketFrameType.PING) { readBufferedBinary(messageChannel, true, new BufferedBinaryMessage(getMaxPingBufferSize(), true)); } else if (messageChannel.getType() == WebSocketFrameType.CLOSE) { readBufferedBinary(messageChannel, true, new BufferedBinaryMessage(getMaxCloseBufferSize(), true)); } }
@Override public void onError(WebSocketChannel channel, BufferedTextMessage context, Throwable throwable) { AbstractReceiveListener.this.onError(channel, throwable); } });
protected void onPing(WebSocketChannel webSocketChannel, StreamSourceFrameChannel channel) throws IOException { bufferFullMessage(channel); }
protected void onFullCloseMessage(final WebSocketChannel channel, BufferedBinaryMessage message) throws IOException { Pooled<ByteBuffer[]> data = message.getData(); try { CloseMessage cm = new CloseMessage(data.getResource()); onCloseMessage(cm, channel); if (!channel.isCloseFrameSent()) { WebSockets.sendClose(cm, channel, null); } } finally { data.close(); } }
@Override protected void onFullBinaryMessage(WebSocketChannel channel, BufferedBinaryMessage message) throws IOException { endpoint.onBinary(channel, message); super.onFullBinaryMessage(channel, message); }
@Override protected void onFullTextMessage(WebSocketChannel channel, BufferedTextMessage message) throws IOException { endpoint.onText(channel, message); super.onFullTextMessage(channel, message); }
@Override protected void onFullPingMessage(WebSocketChannel channel, BufferedBinaryMessage message) throws IOException { endpoint.onPing(channel, message); super.onFullPingMessage(channel, message); }
@Override protected void onFullPongMessage(WebSocketChannel channel, BufferedBinaryMessage message) throws IOException { endpoint.onPong(channel, message); super.onFullPongMessage(channel, message); }
@Override protected void onClose(WebSocketChannel webSocketChannel, StreamSourceFrameChannel channel) throws IOException { activeChannels.remove(webSocketChannel); super.onClose(webSocketChannel, channel); }
/** * Utility method that reads a full text or binary message, including all fragmented parts. Once the full message is * read then the {@link #onFullTextMessage(WebSocketChannel, BufferedTextMessage)} or * {@link #onFullBinaryMessage(WebSocketChannel, BufferedBinaryMessage)} method will be invoked. * * @param messageChannel The message channel */ protected final void bufferFullMessage(StreamSourceFrameChannel messageChannel) { if (messageChannel.getType() == WebSocketFrameType.TEXT) { readBufferedText(messageChannel, new BufferedTextMessage(getMaxTextBufferSize(), true)); } else if (messageChannel.getType() == WebSocketFrameType.BINARY) { readBufferedBinary(messageChannel, false, new BufferedBinaryMessage(getMaxBinaryBufferSize(), true)); } else if (messageChannel.getType() == WebSocketFrameType.PONG) { readBufferedBinary(messageChannel, true, new BufferedBinaryMessage(getMaxPongBufferSize(), true)); } else if (messageChannel.getType() == WebSocketFrameType.PING) { readBufferedBinary(messageChannel, true, new BufferedBinaryMessage(getMaxPingBufferSize(), true)); } else if (messageChannel.getType() == WebSocketFrameType.CLOSE) { readBufferedBinary(messageChannel, true, new BufferedBinaryMessage(getMaxCloseBufferSize(), true)); } }
@Override public void onError(WebSocketChannel channel, BufferedBinaryMessage context, Throwable throwable) { context.getData().close(); AbstractReceiveListener.this.onError(channel, throwable); } });
protected void onClose(WebSocketChannel webSocketChannel, StreamSourceFrameChannel channel) throws IOException { bufferFullMessage(channel); }
@Override protected void onCloseMessage(CloseMessage cm, WebSocketChannel channel) { endpoint.onClose(channel, cm); super.onCloseMessage(cm, channel); }
@Override protected void onFullBinaryMessage(final WebSocketChannel channel, BufferedBinaryMessage message) throws IOException { final ByteBuffer buf = WebSockets.mergeBuffers(message.getData().getResource()); manager.getListener().onBinary(this, buf); super.onFullBinaryMessage(channel, message); touchLastActivityTime(); }
@Override protected void onFullTextMessage(final WebSocketChannel channel, BufferedTextMessage message) throws IOException { manager.getListener().onText(this, message.getData()); super.onFullTextMessage(channel, message); touchLastActivityTime(); }
@Override protected void onFullPingMessage(final WebSocketChannel channel, BufferedBinaryMessage message) throws IOException { super.onFullPingMessage(channel, message); touchLastActivityTime(); final ByteBuffer buf = WebSockets.mergeBuffers(message.getData().getResource()); manager.getListener().onPing(this, buf); }
@Override protected void onFullPongMessage(final WebSocketChannel channel, BufferedBinaryMessage message) throws IOException { super.onFullPongMessage(channel, message); touchLastActivityTime(); final ByteBuffer buf = WebSockets.mergeBuffers(message.getData().getResource()); manager.getListener().onPong(this, buf); }