Created
September 4, 2021 13:55
-
-
Save Geolykt/5dcc52dbb8e97c5c4cee81352e813778 to your computer and use it in GitHub Desktop.
old ServerHandler code before rewrite to support large packets
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package de.geolykt.galimp.prototype.server; | |
import java.nio.ByteBuffer; | |
import java.util.ArrayList; | |
import java.util.Arrays; | |
import java.util.List; | |
import de.geolykt.galimp.prototype.Side; | |
import de.geolykt.galimp.prototype.common.PacketProccessor; | |
import de.geolykt.galimp.prototype.server.packets.processing.JoinPacketProcessor; | |
import io.netty.buffer.ByteBuf; | |
import io.netty.channel.ChannelHandlerContext; | |
import io.netty.channel.ChannelInboundHandlerAdapter; | |
public class ServerHandler extends ChannelInboundHandlerAdapter { | |
protected final GalimulatorServer server; | |
protected final PacketProccessor[] packetProccessors; | |
public ServerHandler(GalimulatorServer galimulatorServer) { | |
this.server = galimulatorServer; | |
this.packetProccessors = new PacketProccessor[] { | |
new JoinPacketProcessor(server) | |
}; | |
} | |
@Override | |
public synchronized void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { | |
server.getLogger().info("Read " + msg); | |
ByteBuf rawData = (ByteBuf) msg; | |
if (rawData.capacity() < 10) { | |
// prevent Buffer underflow | |
server.extension.getLogger().error("Unable to parse packet (buffer underflow): " + Arrays.toString(rawData.array()) + ". Packet ignored."); | |
return; | |
} | |
ByteBuffer readData = rawData.nioBuffer(); | |
long sourceClient = readData.getLong(); | |
short packetId = readData.getShort(); | |
if (packetProccessors.length <= packetId || packetId < 0) { | |
// prevent potential AIOBE | |
server.extension.getLogger().warn("Ignoring packet from client " + sourceClient + " as it is using an unsupported packetId (" + packetId + ")."); | |
return; | |
} | |
packetProccessors[packetId].process(Side.CLIENT, sourceClient, readData); | |
} | |
@Override | |
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { | |
server.getLogger().error("Error in Server NIO. Closing channel", cause); | |
ctx.close(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment