From 777e51b7312c3ec7a544a30c66c4a223d998c457 Mon Sep 17 00:00:00 2001 From: sanjomo Date: Mon, 30 Mar 2026 16:05:13 +0530 Subject: [PATCH] Use ctx.fireChannelRead and reorder packet handler Replace pipeline.fireChannelRead(...) with ctx.fireChannelRead(...) in PollingTransport and WebSocketTransport so events are propagated from the current handler context (next handler) instead of from the pipeline head. Move PACKET_HANDLER registration in SocketIOChannelInitializer to after the transport handlers (but before the encoder) to ensure correct handler ordering and avoid double-processing. Changes affect SocketIOChannelInitializer.java, PollingTransport.java, and WebSocketTransport.java. --- .../com/socketio4j/socketio/SocketIOChannelInitializer.java | 4 ++-- .../com/socketio4j/socketio/transport/PollingTransport.java | 2 +- .../com/socketio4j/socketio/transport/WebSocketTransport.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/netty-socketio-core/src/main/java/com/socketio4j/socketio/SocketIOChannelInitializer.java b/netty-socketio-core/src/main/java/com/socketio4j/socketio/SocketIOChannelInitializer.java index dbffb960..dbb980fa 100644 --- a/netty-socketio-core/src/main/java/com/socketio4j/socketio/SocketIOChannelInitializer.java +++ b/netty-socketio-core/src/main/java/com/socketio4j/socketio/SocketIOChannelInitializer.java @@ -186,14 +186,14 @@ protected Object newContinueResponse(HttpMessage start, int maxContentLength, pipeline.addLast(HTTP_COMPRESSION, new HttpContentCompressor()); } - pipeline.addLast(PACKET_HANDLER, packetHandler); - pipeline.addLast(AUTHORIZE_HANDLER, authorizeHandler); pipeline.addLast(XHR_POLLING_TRANSPORT, xhrPollingTransport); if (configuration.isWebsocketCompression()) { pipeline.addLast(WEB_SOCKET_TRANSPORT_COMPRESSION, new WebSocketServerCompressionHandler()); } pipeline.addLast(WEB_SOCKET_TRANSPORT, webSocketTransport); + + pipeline.addLast(PACKET_HANDLER, packetHandler); pipeline.addLast(SOCKETIO_ENCODER, encoderHandler); diff --git a/netty-socketio-core/src/main/java/com/socketio4j/socketio/transport/PollingTransport.java b/netty-socketio-core/src/main/java/com/socketio4j/socketio/transport/PollingTransport.java index 0aef5412..427f428c 100644 --- a/netty-socketio-core/src/main/java/com/socketio4j/socketio/transport/PollingTransport.java +++ b/netty-socketio-core/src/main/java/com/socketio4j/socketio/transport/PollingTransport.java @@ -172,7 +172,7 @@ private void onPost(UUID sessionId, ChannelHandlerContext ctx, String origin, By content = decoder.preprocessJson(jsonIndex, content); } - ctx.pipeline().fireChannelRead(new PacketsMessage(client, content, Transport.POLLING)); + ctx.fireChannelRead(new PacketsMessage(client, content, Transport.POLLING)); } protected void onGet(UUID sessionId, ChannelHandlerContext ctx, String origin) { diff --git a/netty-socketio-core/src/main/java/com/socketio4j/socketio/transport/WebSocketTransport.java b/netty-socketio-core/src/main/java/com/socketio4j/socketio/transport/WebSocketTransport.java index 40524fd4..94a83284 100644 --- a/netty-socketio-core/src/main/java/com/socketio4j/socketio/transport/WebSocketTransport.java +++ b/netty-socketio-core/src/main/java/com/socketio4j/socketio/transport/WebSocketTransport.java @@ -97,7 +97,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception // Retain its content since we pass it further down the pipeline. PacketsMessage packetsMessage = new PacketsMessage(client, frame.content().retain(), Transport.WEBSOCKET); try { - ctx.pipeline().fireChannelRead(packetsMessage); + ctx.fireChannelRead(packetsMessage); } finally { frame.release(); }