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