예제 #1
0
파일: PacketCPing.cs 프로젝트: Draiget/rhms
        public override void Read(StreamReader sr, RemotePacketState state)
        {
            var input = sr.ReadToEnd();

            if (input.StartsWith("ping"))
            {
                _tmp = "pong";
            }
        }
예제 #2
0
        public static void AcceptPacket(RemotePacketState remoteState, NetworkClient.PacketDataContainer packetData)
        {
            var packetBuffer = new byte[packetData.Buffer.Length - 5];

            Buffer.BlockCopy(packetData.Buffer, 5, packetBuffer, 0, packetBuffer.Length);

            var packetId = BitConverter.ToUInt32(packetData.Buffer, 1);

            Logger.Debug($"Trying to accept packet with id {packetId}");

            Type packetType;

            if ((packetType = FindPacketWithId(packetId)) == null)
            {
                // Unknown packet
                Logger.Debug($"Unknown packet id '{packetId}' from [/{packetData.Remote as IPEndPoint}]");
                return;
            }

            NetPacket netPacket;

            try {
                netPacket = (NetPacket)Activator.CreateInstance(packetType);
            } catch (Exception e) {
                Logger.Error($"Unable to create instance of packet id '{packetId}'", e);
                return;
            }

            try {
                using (var sr = new StreamReader(new MemoryStream(packetBuffer))) {
                    netPacket.Read(sr, remoteState);
                    netPacket.Process(ClientInstance.PacketHandler);

                    new Task(() => {
                        ClientInstance?.SendPacket(netPacket, packetData, remoteState);
                    }).RunSynchronously();
                }
            } catch (Exception e) {
                Logger.Error($"Unable to process packet '{netPacket}'", e);
            }
        }
예제 #3
0
파일: PacketCPing.cs 프로젝트: Draiget/rhms
 public override void Write(StreamWriter sw, RemotePacketState state)
 {
     sw.Write(_tmp);
 }
예제 #4
0
 public abstract void Write(StreamWriter sw, RemotePacketState state);
예제 #5
0
 public abstract void Read(StreamReader sr, RemotePacketState state);
예제 #6
0
 public override void Read(StreamReader sr, RemotePacketState state)
 {
 }