public virtual void ProcessPacketStream(SocketStateObject state, PacketIdentifier packetId, DataStream packetStream) { if (Handler.Contains(packetId) || CompleteHandler.Contains(packetId)) { GamePacket packet; if (!PacketsRegistry.TryGetPacket(packetId, out packet)) { packet = new BasePacket(); } packet.Deserialize(packetStream); var args = Handler.HandlePacket(packetId, packet); if (args == null || !args.Cancel) { if (args == null) { Send(state, packetId.PacketId, packetStream.Reset()); } else { Send(state, packetId, packet); } CompleteHandler.HandlePacket(packetId, packet); } } else { Send(state, packetId.PacketId, packetStream); } }