Пример #1
0
        private void HandlePacket(PlayerInfo player, PacketData packet)
        {
            if (packet.Packet is PacketPing)
            {
                foreach (var user in connectedUsers)
                {
                    if (user.Key.Address == player.Address && user.Key.Port == player.Port)
                    {
                        user.Key.Restart = true;
                    }
                }
                player.Stopwatch.Reset();
            }

            if (packet.Packet is PacketDisconnect)
            {
                RemovePlayer(player);
                foreach (var user in connectedUsers)
                {
                    outboundPacketQueue.Enqueue(new PacketDisconnect(player.Object.ID, new IPEndPoint(user.Key.Address, user.Key.Port)));
                }
                if (player != null)
                    Line("Disconnected with user " + player.Username);
            }

            if (packet.Packet is PacketMove)
            {
                PacketMove move = (PacketMove)packet.Packet;
                foreach (var item in connectedUsers)
                {
                    if (item.Key.Address == player.Address && item.Key.Port == player.Port && item.Key.Object.ID == move.ID && item.Key.Object.Health > 0)
                        item.Key.Object.Area = new RectangleFloat(move.NewPosition.X, move.NewPosition.Y, move.NewPosition.Width, move.NewPosition.Height);

                    if (item.Key.Object.Health > 0)
                        outboundPacketQueue.Enqueue(new PacketMove(move.ID, move.NewPosition, new IPEndPoint(item.Key.Address, item.Key.Port)));
                }
            }

            if (packet.Packet is PacketShoot)
            {
                PacketShoot shoot = (PacketShoot)packet.Packet;
                shoot.Object.ID = ++bulletIdCount;
                bulletList.Add(shoot.Object);

                foreach (var item in connectedUsers)
                {
                    outboundPacketQueue.Enqueue(new PacketShoot(shoot.Object, new IPEndPoint(item.Key.Address, item.Key.Port)));
                }

                shoot.Object.Shoot();
            }
        }
Пример #2
0
 private void AddPlayer(PlayerInfo player, PacketData loginPacket)
 {
     var packets = new ConcurrentQueue<PacketData>();
     connectedUsers.AddOrUpdate(player, packets, (oldKey, oldValue) => packets);
 }
Пример #3
0
 public virtual void SetData(PacketData data)
 {
     this.data = data;
 }