From c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Thu, 12 Feb 2026 22:33:32 -0800 Subject: Initial commit --- NET/worlds/network/netPacketReader.java | 160 ++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 NET/worlds/network/netPacketReader.java (limited to 'NET/worlds/network/netPacketReader.java') diff --git a/NET/worlds/network/netPacketReader.java b/NET/worlds/network/netPacketReader.java new file mode 100644 index 0000000..b42f357 --- /dev/null +++ b/NET/worlds/network/netPacketReader.java @@ -0,0 +1,160 @@ +package NET.worlds.network; + +import NET.worlds.console.StatNetMUNode; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.Vector; + +public class netPacketReader extends Thread { + private Vector _msgQ; + private ServerInputStream _in; + private WorldServer _serv; + private static Class[] msgTable = new Class[255]; + + static { + String basePath = "NET.worlds.network."; + Vector cmdList = new netCmds().recvCmdList(); + + for (int i = 0; i < cmdList.size(); i++) { + String cmdName = basePath + cmdList.elementAt(i); + + try { + Class tmpCmdClass = (Class)Class.forName(cmdName); + receivedNetPacket tmpInstance = tmpCmdClass.newInstance(); + int indx = tmpInstance.msgID(); + + assert indx > -1; + + assert msgTable[indx] == null; + + msgTable[indx] = tmpCmdClass; + } catch (NoSuchMethodError var11) { + NoSuchMethodError e = var11; + synchronized (System.out) { + System.out.println("netPacketReader:: " + e.getClass().getName() + " creating " + cmdName); + System.out.println("netPacketReader:: Exception: " + e.getMessage()); + e.printStackTrace(System.out); + } + + assert false; + } catch (Exception var12) { + Exception e = var12; + synchronized (System.out) { + System.out.println("netPacketReader:: " + e.getClass().getName() + " creating " + cmdName); + System.out.println("netPacketReader:: Exception: " + e.getMessage()); + e.printStackTrace(System.out); + } + + assert false; + } + } + } + + public netPacketReader(ServerInputStream in) { + this._in = in; + this._msgQ = new Vector(); + } + + public netPacketReader(WorldServer serv, ServerInputStream in) { + this._serv = serv; + this._in = in; + this._msgQ = new Vector(); + this._in.setVersion(this.getVersion()); + } + + public void setVersion(int vers) { + this._in.setVersion(vers); + } + + public int getVersion() { + return this._serv.getVersion(); + } + + public void put(receivedNetPacket pkt) { + this._msgQ.addElement(pkt); + } + + public receivedNetPacket get() { + assert this._msgQ != null; + + if (this._msgQ.isEmpty()) { + return null; + } else { + receivedNetPacket packet = this._msgQ.firstElement(); + this._msgQ.removeElement(packet); + return packet; + } + } + + public int count() { + return this._msgQ.size(); + } + + private final void buildMsg() throws IOException { + this._in.readPacketSize(); + byte[] packetData = new byte[this._in.bytesLeft() + 1]; + packetData[0] = (byte)(this._in.bytesLeft() + 1); + this._in.readFully(packetData, 1, this._in.bytesLeft()); + StatNetMUNode netStat = StatNetMUNode.getNode(); + netStat.addBytesRcvd(packetData.length); + netStat.addPacketsRcvd(1); + ServerInputStream in = new ServerInputStream(new ByteArrayInputStream(packetData)); + in.readPacketSize(); + if ((WorldServer.getDebugLevel() & 2048) > 0) { + synchronized (System.out) { + System.out.print(this._serv + ": recv["); + + for (int i = 0; i < packetData.length; i++) { + System.out.print(Integer.toString(packetData[i] & 255, 16) + " "); + } + + System.out.println("]"); + } + } + + receivedNetPacket packet = null; + ObjID objID = new ObjID(); + objID.parseNetData(in); + boolean isCO = objID.shortID() == 254; + int cmdType = in.readUnsignedByte(); + if (cmdType < msgTable.length && msgTable[cmdType] != null) { + do { + if (isCO) { + objID = new ObjID(); + objID.parseNetData(in); + } + + try { + packet = msgTable[cmdType].newInstance(); + } catch (Exception var8) { + System.out.println(var8 + ": " + var8.getMessage()); + + assert false; + } + + packet.init(objID); + packet.parseNetData(in); + this._msgQ.addElement(packet); + yield(); + } while (!in.isEmpty() && isCO); + + assert in.isEmpty(); + } else { + System.out.println("UNKNOWN SERVER MSG#" + String.valueOf(cmdType)); + in.skipBytes(in.bytesLeft()); + + assert in.isEmpty(); + } + } + + @Override + public void run() { + try { + while (true) { + this.buildMsg(); + } + } catch (IOException var2) { + this._msgQ.addElement(new ExceptionCmd(var2)); + } + } +} -- cgit v1.2.3