示例#1
0
文件: Parser.cs 项目: tgy/CSharp
 public static void Parse(Client client, Packet packet)
 {
     if(Packets.ContainsKey(packet.Header.OpCode))
         Packets[packet.Header.OpCode].Unpack(client, packet);
     else
         throw new Exception("Packet inconnu: " + packet.Header.OpCode);
 }
示例#2
0
文件: Client.cs 项目: tgy/CSharp
        void Receive()
        {
            while (Connected)
            {
                Thread.Sleep(20);

                if (_client.Client.Poll(1, SelectMode.SelectRead) && _client.Available == 0)
                {
                    Connected = false;
                    return;
                }

                if (Parser.Packets.Count == 0) continue;

                if (_client.Available <= PacketHeader.HeaderSize) continue;

                var header = Packet.GetHeader(Reader);

                while (Connected && _client.Available < header.DataSize)
                {
                    Thread.Sleep(20);

                    if (!_client.Client.Poll(1, SelectMode.SelectRead) || _client.Available != 0) continue;

                    Connected = false;
                    return;
                }

                if (!Connected) return; // deconnexion sauvage

                var packet = new Packet(header, Reader.ReadBytes(header.DataSize));

                Parser.Parse(this, packet);
            }
        }