示例#1
0
        public Packet Receive(Stream processingStream)
        {
            var packetReader = new StreamPacketReader(processingStream, receiveBuffer);
            int packetId     = packetReader.ReadByte();

            if ((packetId < 0) || (packetId > 255))
            {
                throw new EndOfStreamException();
            }

            diagnosticPullStream.StartPacket();
            var packetDefinition = packetRegistry.Find(packetId);
            var packetSize       = packetDefinition.GetSize(packetReader);

            packetReader.ReadBytes(packetSize - packetReader.Position);
            var payload = new byte[packetSize];

            Array.Copy(receiveBuffer, 0, payload, 0, packetSize);

            var packet = new Packet(packetId, payload);

            if (packetId == PacketDefinitions.ConnectToGameServer.Id)
            {
                Status = ServerConnectionStatus.PreGame;
            }

            diagnosticPullStream.FinishPacket(packet);

            return(packet);
        }
 private void OnPacketReceived(Packet packet)
 {
     diagnosticPullStream.FinishPacket(packet);
     PacketReceived?.Invoke(this, packet);
 }