private async Task OnGameEndedAsync(GameEndedMessage message) { var view = message.FinalState; var leaders = await GetLeadersAsync(view); var hub = _connectionManager.GetHubContext <GameHub>(); hub.Clients.All.updateLeaderboard(new { GameId = view.Game.GameId, Final = true, Leaders = leaders }); }
private void CheckState(CheckStateCommand command) { if (!_expired && ShouldBeExpired()) { _clock.Stop(); _expired = true; var endingMessage = new GameEndedMessage(_gameState.GameId, GetCurrentView()); Context.System.EventStream.Publish(endingMessage); } else if (!_expired) { PublishCurrentState(); } }
private async Task SaveGameAsync(GameEndedMessage x) { var league = new League { CreatedAt = x.FinalState.Game.CreatedAt, Description = x.FinalState.Game.Description, Duration = x.FinalState.Game.Duration, LeagueId = x.FinalState.Game.GameId, Name = x.FinalState.Game.Name }; await _client.PutLeagueAsync(x.FinalState.Game.GameId, league); // TODO: make this less chatty by adding a bulk API foreach (var region in x.FinalState.Regions) { var apiRegion = new Region { BlockCount = region.BlockCount, Name = region.Name, RegionId = region.RegionId }; await _client.PutRegionAsync(x.FinalState.Game.GameId, apiRegion.RegionId, apiRegion); } }
private void OnGameEnd(GameEndedMessage x) { _gameToCountMap.Remove(x.GameId); _dirty = true; }
private void OnGameEnded(GameEndedMessage message) { Context.ActorSelection("/user/leaderboard").Tell(message); }