public async Task <IActionResult> CreateAsync([FromBody] Player item) { try { await _playerRepo.AddOrUpdateAsync(item); await _playerRepo.SaveChangesAsync(); return(Ok()); } catch (System.Exception ex) { _logger.LogError(ex, $"Create failed for player {item.LastName}"); return(BadRequest("Error occured")); } }
public async Task AddOrUpdateAsync(IEnumerable <PlayerDto> players) { var playerDtos = players?.ToArray() ?? new PlayerDto[0]; if (!playerDtos.Any()) { return; } await _inner.AddOrUpdateAsync(playerDtos); foreach (var player in playerDtos) { _cache.Remove(player.GUID); } }
public async Task AddOrUpdateAsync(IEnumerable <PlayerDto> players) { var playerDtos = players?.ToArray() ?? new PlayerDto[0]; if (!playerDtos.Any()) { return; } await _playerRepository.AddOrUpdateAsync(playerDtos); foreach (var player in playerDtos) { if ((await GetCacheAsync()).ContainsKey(player.GUID) == false) { _log.Info("AddOrUpdateAsync - found new Player, resetting cache"); _validCache = false; break; } (await GetCacheAsync()).AddOrUpdate(player.GUID, player, (k, v) => player); } }
private async Task <bool> RegisterPlayersInternal(IEnumerable <Player> list) { var players = list.ToList(); if (!HaveChanges(players, x => x.Num)) { return(false); } var prevoius = new HashSet <string>(_previousState.Select(x => x.Guid).Distinct()); _previousState = players; var guids = players.Select(x => x.Guid).ToList(); var playersInDb = (await _playerRepository.GetPlayersAsync(guids)).ToArray(); var dbGuids = playersInDb.Select(x => x.GUID).ToList(); var historyToAdd = new List <PlayerHistory>(); var playerToUpdate = new List <PlayerDto>(); foreach (var player in playersInDb) { var p = players.FirstOrDefault(x => x.Guid == player.GUID); if (p != null) { var needUpdate = false; if ((player.Name != p.Name) || (player.LastIp != p.IP)) { historyToAdd.Add(new PlayerHistory { IP = p.IP, Name = p.Name, PlayerId = player.Id, ServerId = _serverId }); player.Name = p.Name; player.LastIp = p.IP; needUpdate = true; } if (prevoius.Contains(player.GUID) == false) { player.LastSeen = DateTime.UtcNow; needUpdate = true; } if (string.IsNullOrEmpty(player.SteamId)) { player.SteamId = _steamService.GetSteamId(player.GUID)?.ToString(); needUpdate = true; } if (needUpdate) { playerToUpdate.Add(player); } } } var newplayers = players.Where(x => !dbGuids.Contains(x.Guid)).ToList(); if (newplayers.Any()) { foreach (var p in newplayers) { var np = new Arma3BEClient.Libs.ModelCompact.Player { GUID = p.Guid, Name = p.Name, Id = Guid.NewGuid(), LastIp = p.IP, SteamId = _steamService.GetSteamId(p.Guid)?.ToString() }; playerToUpdate.Add(np); historyToAdd.Add(new PlayerHistory { IP = np.LastIp, Name = np.Name, PlayerId = np.Id, ServerId = _serverId }); } } await _playerRepository.AddOrUpdateAsync(playerToUpdate); await _playerRepository.AddHistoryAsync(historyToAdd); return(true); }
public async Task OnLogoutClick(DecoderMessage <ButtonMessage> buttonMessage) { await _playerRepository.AddOrUpdateAsync(buttonMessage.Player); await _protoMessageSender.SendAsync(buttonMessage.Player, new LogoutMessage()); }