public override async Task OnDisconnectedAsync(Exception exception) { if (_gameController.GetPlayer1ConnectionId() == Context.ConnectionId) { if (_gameController.MustPlayGame()) { _gameController.Player1Disconnected(); } _gameController.SetPlayer1ConnectionId(null); } else if (_gameController.GetPlayer2ConnectionId() == Context.ConnectionId) { if (_gameController.MustPlayGame()) { _gameController.Player2Disconnected(); } _gameController.SetPlayer2ConnectionId(null); } await base.OnDisconnectedAsync(exception); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested && _hubContext != null) { if (_gameController.MustPlayGame()) { // Faccio sempre muovere la palla var pointPlayerName = _gameController.BallController.Update(); // Se nessuno ha fatto punto if (pointPlayerName == null) { foreach (var gameObject in _gameController.GameObjects.Where(g => g.Moved)) { // Se so chi ha fatto l'update evito di mandarglielo if (gameObject.LastUpdatedBy != null) { await _hubContext.Clients.AllExcept(gameObject.LastUpdatedBy).UpdateGameObjectPositionOnClient(gameObject); } else { await _hubContext.Clients.All.UpdateGameObjectPositionOnClient(gameObject); } gameObject.Moved = false; } } else { int playerPoints; Enums.ClientType playerType; // Altrimenti aggiungo il punto e resetto il tutto if (pointPlayerName.Equals("player1")) { playerPoints = _gameController.AddPlayer1Point(); playerType = Enums.ClientType.Player1; } else { playerPoints = _gameController.AddPlayer2Point(); playerType = Enums.ClientType.Player2; } await _hubContext.Clients.All.UpdatePlayerPoints(playerType, playerPoints); // Da il tempo di visualizzare il messaggio del punto se il gioco non deve essere resettato if (!_gameController.MustReset()) { await Task.Delay(3000, stoppingToken); } } } if (_gameController.MustReset()) { string gameOverMessage = _gameController.GetGameOverMessage(); await _hubContext.Clients.All.UpdateGameMessage(gameOverMessage); } else { await Task.Delay(10, stoppingToken); } } }