Пример #1
0
        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"));
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        public async Task OnLogoutClick(DecoderMessage <ButtonMessage> buttonMessage)
        {
            await _playerRepository.AddOrUpdateAsync(buttonMessage.Player);

            await _protoMessageSender.SendAsync(buttonMessage.Player, new LogoutMessage());
        }