public async Task DisconnectAsync(ClientConnection client, string reason)
        {
            _connectionManager.RemoveConnection(client.Id);

            var disconnectPacket = new DisconnectPacket(client.Id, reason);

            await _socketManager.SendAsync(
                data : disconnectPacket.Serialize(),
                recipients : _connectionManager.GetAllAvailableRecipients()
                );
        }
Exemple #2
0
        public async Task SendWorldStateToClients()
        {
            var worldStatePacket = new WorldStatePacket();

            await _socketManager.SendAsync(
                data :        worldStatePacket.SetWorldState(_lastWorldState).Serialize(),
                recipients : _connectionManager.GetAllAvailableRecipients());
        }
        public async Task ProcessIncomingPacketAsync(Packet packet)
        {
            if (packet is ConnectionPacket)
            {
                var connectionPacket = packet as ConnectionPacket;
                var acceptPacket     = new AcceptConnectionPacket();

                var addedClient     = _connectionManager.AddConnection(connectionPacket);
                var connectedClient = _connectionManager.GetClientById(addedClient.Id);

                _gameStateManager.AddPlayer(connectedClient.Id);

                var currentWorldState = _gameStateManager.GetLastWorldState();

                await _socketManager.SendAsync(acceptPacket.SetIdentifier(addedClient.Id)
                                               .SetWorldState(currentWorldState)
                                               .Serialize(),
                                               connectedClient);

                await _socketManager.SendAsync(connectionPacket
                                               .SetIdentifier(addedClient.Id)
                                               .Serialize(),
                                               recipients : _connectionManager.GetAllAvailableRecipients(),
                                               except : connectedClient
                                               );
            }

            if (packet is PingPacket)
            {
                var pingPacket = packet as PingPacket;

                _connectionManager.SetAsPinged(pingPacket.ClientId);

                await _clientManager.PingClientAsync(pingPacket.ClientId);
            }

            if (packet is MovementPacket)
            {
                var movementPacket = packet as MovementPacket;

                _gameStateManager.MovePlayer(movementPacket.ClientId, movementPacket.PacketSequenceNumber, movementPacket.Direction);
            }
        }