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); }
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); } }