@Override public Future<Void> sendBinaryFrame(ByteBuf payload, boolean finalFragment, int rsv) { return channel.writeAndFlush(new BinaryWebSocketFrame(finalFragment, rsv, payload)); }
@Override public void write( ChannelHandlerContext ctx, Object msg, ChannelPromise promise ) { if ( msg instanceof ByteBuf ) { ctx.write( new BinaryWebSocketFrame( (ByteBuf) msg ), promise ); } else { ctx.write( msg, promise ); } } }
@Override protected void encode(ChannelHandlerContext chc, ByteBuf bb, List<Object> out) throws Exception { // convert the ByteBuf to a WebSocketFrame BinaryWebSocketFrame result = new BinaryWebSocketFrame(); // System.out.println("ByteBufToWebSocketFrameEncoder encode - " + // ByteBufUtil.hexDump(bb)); result.content().writeBytes(bb); out.add(result); } }
private void sendBytes(final ByteBuf buffer, final SuccessCallback success, final OnError err) { ctx.channel().writeAndFlush(new BinaryWebSocketFrame(buffer)) .addListener(listener(success, err)); }
@Override public BinaryWebSocketFrame replace(ByteBuf content) { return new BinaryWebSocketFrame(isFinalFragment(), rsv(), content); }
@Override protected WebSocketFrame beginAggregation(WebSocketFrame start, ByteBuf content) throws Exception { if (start instanceof TextWebSocketFrame) { return new TextWebSocketFrame(true, start.rsv(), content); } if (start instanceof BinaryWebSocketFrame) { return new BinaryWebSocketFrame(true, start.rsv(), content); } // Should not reach here. throw new Error(); } }
@Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { log.debug("In webapp socket encoder {}", msg); if (msg instanceof MessageBase) { MessageBase message = (MessageBase) msg; ByteBuf out = ByteBufAllocator.DEFAULT.buffer(); out.writeByte(message.command); out.writeShort(message.id); if (message instanceof ResponseMessage) { out.writeInt(((ResponseMessage) message).code); } else { byte[] body = message.getBytes(); if (body.length > 0) { out.writeBytes(body); } } super.write(ctx, new BinaryWebSocketFrame(out), promise); } else { super.write(ctx, msg, promise); } } }
@Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (ctx.channel().isWritable()) { if (msg instanceof ByteBuf) { super.write(ctx, new BinaryWebSocketFrame((ByteBuf) msg), promise); } else { super.write(ctx, msg, promise); } } }
/** * Encode the given message with the given media type. * @param message The message * @param mediaType The media type * @return The encoded frame */ public WebSocketFrame encodeMessage(Object message, MediaType mediaType) { if (message instanceof byte[]) { return new BinaryWebSocketFrame(Unpooled.wrappedBuffer((byte[]) message)); } else if (ClassUtils.isJavaLangType(message.getClass())) { String s = message.toString(); return new TextWebSocketFrame(s); } else if (message instanceof ByteBuf) { return new BinaryWebSocketFrame((ByteBuf) message); } else if (message instanceof ByteBuffer) { return new BinaryWebSocketFrame(Unpooled.wrappedBuffer((ByteBuffer) message)); } else { Optional<MediaTypeCodec> codec = codecRegistry.findCodec(mediaType != null ? mediaType : MediaType.APPLICATION_JSON_TYPE); if (codec.isPresent()) { io.micronaut.core.io.buffer.ByteBuffer encoded = codec.get().encode(message, new NettyByteBufferFactory(UnpooledByteBufAllocator.DEFAULT)); return new TextWebSocketFrame((ByteBuf) encoded.asNativeBuffer()); } } throw new WebSocketSessionException("Unable to encode WebSocket message: " + message); } }
private WebSocketFrame decodeBinaryFrame(ChannelHandlerContext ctx, byte type, ByteBuf buffer) { long frameSize = 0; int lengthFieldSize = 0; byte b; do { b = buffer.readByte(); frameSize <<= 7; frameSize |= b & 0x7f; if (frameSize > maxFrameSize) { throw new TooLongFrameException(); } lengthFieldSize++; if (lengthFieldSize > 8) { // Perhaps a malicious peer? throw new TooLongFrameException(); } } while ((b & 0x80) == 0x80); if (type == (byte) 0xFF && frameSize == 0) { receivedClosingHandshake = true; return new CloseWebSocketFrame(); } ByteBuf payload = readBytes(ctx.alloc(), buffer, (int) frameSize); return new BinaryWebSocketFrame(payload); }
log.trace("Out attachment: {} sessionId: {}", ByteBufUtil.hexDump(outBuf), msg.getSessionId()); writeFutureList.add(ctx.channel().writeAndFlush(new BinaryWebSocketFrame(outBuf)));
@Override protected void encode(ChannelHandlerContext ctx, WebSocketConvertHandler.MyWebSocketFrame msg, List<Object> out) throws Exception { ByteBuf payload = msg.getData().duplicate().retain(); switch (msg.getType()) { case BINARY: out.add(new BinaryWebSocketFrame(payload)); break; case TEXT: out.add(new TextWebSocketFrame(payload)); break; case CLOSE: out.add(new CloseWebSocketFrame(true, 0, payload)); break; case CONTINUATION: out.add(new ContinuationWebSocketFrame(payload)); break; case PONG: out.add(new PongWebSocketFrame(payload)); break; case PING: out.add(new PingWebSocketFrame(payload)); break; default: throw new IllegalStateException( "Unsupported websocket msg " + msg);} }
WebSocketFrame encodeFrame(WebSocketFrameImpl frame) { ByteBuf buf = frame.getBinaryData(); if (buf != Unpooled.EMPTY_BUFFER) { buf = safeBuffer(buf, chctx.alloc()); } switch (frame.type()) { case BINARY: return new BinaryWebSocketFrame(frame.isFinal(), 0, buf); case TEXT: return new TextWebSocketFrame(frame.isFinal(), 0, buf); case CLOSE: return new CloseWebSocketFrame(true, 0, buf); case CONTINUATION: return new ContinuationWebSocketFrame(frame.isFinal(), 0, buf); case PONG: return new PongWebSocketFrame(buf); case PING: return new PingWebSocketFrame(buf); default: throw new IllegalStateException("Unsupported websocket msg " + frame); } }
protected WebSocketFrame toFrame(WebSocketMessage message) { ByteBuf byteBuf = NettyDataBufferFactory.toByteBuf(message.getPayload()); if (WebSocketMessage.Type.TEXT.equals(message.getType())) { return new TextWebSocketFrame(byteBuf); } else if (WebSocketMessage.Type.BINARY.equals(message.getType())) { return new BinaryWebSocketFrame(byteBuf); } else if (WebSocketMessage.Type.PING.equals(message.getType())) { return new PingWebSocketFrame(byteBuf); } else if (WebSocketMessage.Type.PONG.equals(message.getType())) { return new PongWebSocketFrame(byteBuf); } else { throw new IllegalArgumentException("Unexpected message type: " + message.getType()); } }
return; } else if (frameOpcode == OPCODE_BINARY) { out.add(new BinaryWebSocketFrame(frameFinalFlag, frameRsv, payloadBuffer)); payloadBuffer = null; return;
outMsg = new TextWebSocketFrame(msg.isFinalFragment(), newRsv(msg), compositeUncompressedContent); } else if (msg instanceof BinaryWebSocketFrame) { outMsg = new BinaryWebSocketFrame(msg.isFinalFragment(), newRsv(msg), compositeUncompressedContent); } else if (msg instanceof ContinuationWebSocketFrame) { outMsg = new ContinuationWebSocketFrame(msg.isFinalFragment(), newRsv(msg),
outMsg = new TextWebSocketFrame(msg.isFinalFragment(), rsv(msg), compressedContent); } else if (msg instanceof BinaryWebSocketFrame) { outMsg = new BinaryWebSocketFrame(msg.isFinalFragment(), rsv(msg), compressedContent); } else if (msg instanceof ContinuationWebSocketFrame) { outMsg = new ContinuationWebSocketFrame(msg.isFinalFragment(), rsv(msg), compressedContent);
private BinaryWebSocketFrame toBinaryWebSocketFrame(Frame frame) { return new BinaryWebSocketFrame(frame.content().skipBytes(FRAME_LENGTH_SIZE).retain()); } }
@Override protected void encode(final ChannelHandlerContext channelHandlerContext, final RequestMessage requestMessage, final List<Object> objects) throws Exception { try { if (binaryEncoding) { final ByteBuf encodedMessage = serializer.serializeRequestAsBinary(requestMessage, channelHandlerContext.alloc()); objects.add(new BinaryWebSocketFrame(encodedMessage)); } else { final MessageTextSerializer textSerializer = (MessageTextSerializer) serializer; objects.add(new TextWebSocketFrame(textSerializer.serializeRequestAsString(requestMessage))); } } catch (Exception ex) { logger.warn(String.format("An error occurred during serialization of this request [%s] - it could not be sent to the server.", requestMessage), ex); } } }
@Override protected void encode(final ChannelHandlerContext ctx, final Frame o, final List<Object> objects) throws Exception { if (o.getMsg() instanceof ByteBuf) objects.add(new BinaryWebSocketFrame((ByteBuf) o.getMsg())); else if (o.getMsg() instanceof String) objects.add(new TextWebSocketFrame(true, 0, o.getMsg().toString())); } }