From f9d94197d5461a3dcb3f846a95cbaafb7a923d03 Mon Sep 17 00:00:00 2001 From: Dank074 Date: Sun, 15 Nov 2020 15:42:02 -0600 Subject: [PATCH] refactored websocket codec to single class --- pom.xml | 4 +-- .../HabboFrameToWebSocketFrameEncoder.java | 29 ------------------- .../{com => org}/krews/plugin/nitro/main.java | 10 +++---- .../websockets/NetworkChannelInitializer.java | 4 +-- .../websockets/codec/WebSocketCodec.java} | 16 ++++++---- .../handlers/MessageInterceptorHandler.java | 8 ++--- src/main/resources/plugin.json | 2 +- 7 files changed, 23 insertions(+), 50 deletions(-) delete mode 100644 src/main/java/com/krews/plugin/nitro/websockets/codec/HabboFrameToWebSocketFrameEncoder.java rename src/main/java/{com => org}/krews/plugin/nitro/main.java (86%) rename src/main/java/{com => org}/krews/plugin/nitro/websockets/NetworkChannelInitializer.java (93%) rename src/main/java/{com/krews/plugin/nitro/websockets/codec/WebSocketFrameToHabboFrameDecoder.java => org/krews/plugin/nitro/websockets/codec/WebSocketCodec.java} (80%) rename src/main/java/{com => org}/krews/plugin/nitro/websockets/handlers/MessageInterceptorHandler.java (75%) diff --git a/pom.xml b/pom.xml index d73881d..9b4b2b9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,9 +4,9 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.krews.nitro + org.krews.plugin.nitro NitroWebsockets - 1.0-SNAPSHOT + 1.0 diff --git a/src/main/java/com/krews/plugin/nitro/websockets/codec/HabboFrameToWebSocketFrameEncoder.java b/src/main/java/com/krews/plugin/nitro/websockets/codec/HabboFrameToWebSocketFrameEncoder.java deleted file mode 100644 index c758c86..0000000 --- a/src/main/java/com/krews/plugin/nitro/websockets/codec/HabboFrameToWebSocketFrameEncoder.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.krews.plugin.nitro.websockets.codec; - -import com.eu.habbo.messages.ServerMessage; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageEncoder; -import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame; -import io.netty.util.IllegalReferenceCountException; - -import java.io.IOException; -import java.util.List; - -public class HabboFrameToWebSocketFrameEncoder extends MessageToMessageEncoder { - - @Override - protected void encode(ChannelHandlerContext channelHandlerContext, ServerMessage message, List out) throws Exception { - try { - BinaryWebSocketFrame frame = new BinaryWebSocketFrame(message.get()); - try { - out.add(frame.retain()); - } finally { - // Release copied buffer. - frame.release(); - } - } catch (IllegalReferenceCountException e) { - throw new IOException(String.format("IllegalReferenceCountException happened for ServerMessage with packet id %d.", message.getHeader()), e); - } - } -} - diff --git a/src/main/java/com/krews/plugin/nitro/main.java b/src/main/java/org/krews/plugin/nitro/main.java similarity index 86% rename from src/main/java/com/krews/plugin/nitro/main.java rename to src/main/java/org/krews/plugin/nitro/main.java index 35a7053..c0cf407 100644 --- a/src/main/java/com/krews/plugin/nitro/main.java +++ b/src/main/java/org/krews/plugin/nitro/main.java @@ -1,4 +1,4 @@ -package com.krews.plugin.nitro; +package org.krews.plugin.nitro; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.users.Habbo; @@ -6,12 +6,12 @@ import com.eu.habbo.plugin.EventHandler; import com.eu.habbo.plugin.EventListener; import com.eu.habbo.plugin.HabboPlugin; import com.eu.habbo.plugin.events.emulator.EmulatorLoadedEvent; -import com.krews.plugin.nitro.websockets.NetworkChannelInitializer; +import org.krews.plugin.nitro.websockets.NetworkChannelInitializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class main extends HabboPlugin implements EventListener { - private static final Logger LOGGER = LoggerFactory.getLogger(Emulator.class); + private static final Logger LOGGER = LoggerFactory.getLogger(main.class); public void onEnable() throws Exception { Emulator.getPluginManager().registerEvents(this, this); @@ -29,7 +29,7 @@ public class main extends HabboPlugin implements EventListener { } @EventHandler - public void onEmulatorLoadedEvent (EmulatorLoadedEvent e) { + public void onEmulatorLoadedEvent (EmulatorLoadedEvent e) throws InterruptedException { //add missing db entry Emulator.getConfig().register("websockets.whitelist", "localhost"); Emulator.getConfig().register("ws.nitro.host", "0.0.0.0"); @@ -37,7 +37,7 @@ public class main extends HabboPlugin implements EventListener { Emulator.getGameServer().getServerBootstrap().childHandler(new NetworkChannelInitializer()); - Emulator.getGameServer().getServerBootstrap().bind(Emulator.getConfig().getValue("ws.nitro.host", "0.0.0.0"), Emulator.getConfig().getInt("ws.nitro.port", 2096)).syncUninterruptibly(); + Emulator.getGameServer().getServerBootstrap().bind(Emulator.getConfig().getValue("ws.nitro.host", "0.0.0.0"), Emulator.getConfig().getInt("ws.nitro.port", 2096)).sync(); LOGGER.info("OFFICIAL PLUGIN - Nitro Websockets has started!"); LOGGER.info("Nitro Websockets Listening on " + Emulator.getConfig().getValue("ws.nitro.host", "0.0.0.0") + ":" + Emulator.getConfig().getInt("ws.nitro.port", 2096)); diff --git a/src/main/java/com/krews/plugin/nitro/websockets/NetworkChannelInitializer.java b/src/main/java/org/krews/plugin/nitro/websockets/NetworkChannelInitializer.java similarity index 93% rename from src/main/java/com/krews/plugin/nitro/websockets/NetworkChannelInitializer.java rename to src/main/java/org/krews/plugin/nitro/websockets/NetworkChannelInitializer.java index db730da..ccdfeea 100644 --- a/src/main/java/com/krews/plugin/nitro/websockets/NetworkChannelInitializer.java +++ b/src/main/java/org/krews/plugin/nitro/websockets/NetworkChannelInitializer.java @@ -1,11 +1,11 @@ -package com.krews.plugin.nitro.websockets; +package org.krews.plugin.nitro.websockets; import com.eu.habbo.messages.PacketManager; import com.eu.habbo.networking.gameserver.decoders.*; import com.eu.habbo.networking.gameserver.encoders.GameServerMessageEncoder; import com.eu.habbo.networking.gameserver.encoders.GameServerMessageLogger; import com.eu.habbo.networking.gameserver.handlers.IdleTimeoutHandler; -import com.krews.plugin.nitro.websockets.handlers.MessageInterceptorHandler; +import org.krews.plugin.nitro.websockets.handlers.MessageInterceptorHandler; import io.netty.channel.ChannelInitializer; import io.netty.channel.socket.SocketChannel; import io.netty.handler.logging.LoggingHandler; diff --git a/src/main/java/com/krews/plugin/nitro/websockets/codec/WebSocketFrameToHabboFrameDecoder.java b/src/main/java/org/krews/plugin/nitro/websockets/codec/WebSocketCodec.java similarity index 80% rename from src/main/java/com/krews/plugin/nitro/websockets/codec/WebSocketFrameToHabboFrameDecoder.java rename to src/main/java/org/krews/plugin/nitro/websockets/codec/WebSocketCodec.java index 4e0eb14..c7afa24 100644 --- a/src/main/java/com/krews/plugin/nitro/websockets/codec/WebSocketFrameToHabboFrameDecoder.java +++ b/src/main/java/org/krews/plugin/nitro/websockets/codec/WebSocketCodec.java @@ -1,18 +1,22 @@ -package com.krews.plugin.nitro.websockets.codec; +package org.krews.plugin.nitro.websockets.codec; import com.eu.habbo.Emulator; +import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageDecoder; -import io.netty.handler.codec.http.websocketx.CloseWebSocketFrame; -import io.netty.handler.codec.http.websocketx.WebSocketFrame; -import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; +import io.netty.handler.codec.MessageToMessageCodec; +import io.netty.handler.codec.http.websocketx.*; import java.net.URI; import java.net.URISyntaxException; import java.util.List; -public class WebSocketFrameToHabboFrameDecoder extends MessageToMessageDecoder { +public class WebSocketCodec extends MessageToMessageCodec { + @Override + protected void encode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + out.add(new BinaryWebSocketFrame(in).retain()); + } + @Override protected void decode(ChannelHandlerContext ctx, WebSocketFrame in, List out) { out.add(in.content().retain()); diff --git a/src/main/java/com/krews/plugin/nitro/websockets/handlers/MessageInterceptorHandler.java b/src/main/java/org/krews/plugin/nitro/websockets/handlers/MessageInterceptorHandler.java similarity index 75% rename from src/main/java/com/krews/plugin/nitro/websockets/handlers/MessageInterceptorHandler.java rename to src/main/java/org/krews/plugin/nitro/websockets/handlers/MessageInterceptorHandler.java index 92c2c2b..5f5ad86 100644 --- a/src/main/java/com/krews/plugin/nitro/websockets/handlers/MessageInterceptorHandler.java +++ b/src/main/java/org/krews/plugin/nitro/websockets/handlers/MessageInterceptorHandler.java @@ -1,7 +1,6 @@ -package com.krews.plugin.nitro.websockets.handlers; +package org.krews.plugin.nitro.websockets.handlers; -import com.krews.plugin.nitro.websockets.codec.HabboFrameToWebSocketFrameEncoder; -import com.krews.plugin.nitro.websockets.codec.WebSocketFrameToHabboFrameDecoder; +import org.krews.plugin.nitro.websockets.codec.WebSocketCodec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; @@ -17,11 +16,10 @@ public class MessageInterceptorHandler extends ByteToMessageDecoder { protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { if(in.toString(CharsetUtil.UTF_8).startsWith("GET")) { // this is a websocket upgrade request, so add the appropriate decoders/encoders - ctx.pipeline().addAfter("messageInterceptor", "websocketHandler", new WebSocketFrameToHabboFrameDecoder()); + ctx.pipeline().addAfter("messageInterceptor", "websocketCodec", new WebSocketCodec()); ctx.pipeline().addAfter("messageInterceptor", "protocolHandler", new WebSocketServerProtocolHandler("/", true)); ctx.pipeline().addAfter("messageInterceptor", "objectAggregator", new HttpObjectAggregator(65536)); ctx.pipeline().addAfter("messageInterceptor", "httpCodec", new HttpServerCodec()); - ctx.pipeline().replace("messageEncoder", "websocketFrameEncoder", new HabboFrameToWebSocketFrameEncoder()); } // Remove ourselves ctx.pipeline().remove(this); diff --git a/src/main/resources/plugin.json b/src/main/resources/plugin.json index 123b506..5e965d6 100644 --- a/src/main/resources/plugin.json +++ b/src/main/resources/plugin.json @@ -1,5 +1,5 @@ { - "main" : "com.krews.plugin.nitro.main", + "main" : "org.krews.plugin.nitro.main", "name" : "Nitro Websockets", "author" : "Krews" } \ No newline at end of file