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(); } }
private void AddPlayer(PlayerInfo player, PacketData loginPacket) { var packets = new ConcurrentQueue<PacketData>(); connectedUsers.AddOrUpdate(player, packets, (oldKey, oldValue) => packets); }
public virtual void SetData(PacketData data) { this.data = data; }