Beispiel #1
0
 public IEnumerable <SynchronizerDto> GetAllUserSynchronizationInfos(string userId)
 {
     return(_scenes
            .Where(scene => scene.IsActive && scene.ShortPlayers.FirstOrDefault(x => x.UserId == userId && !x.Left) != null)
            .Select(scene =>
     {
         var player = scene.ShortPlayers.First(x => x.UserId == userId);
         var synchronizer = BattleHelper.GetFullSynchronizationData(scene, userId);
         BattleHelper.CalculateReward(ref synchronizer, scene, player.Id);
         return synchronizer;
     })
            .ToHashSet());
 }
Beispiel #2
0
        public SynchronizerDto GetUserSynchronizationInfo(string userId, Guid?sceneId)
        {
            IScene scene;

            scene = _scenes
                    .FirstOrDefault(scene => scene.IsActive &&
                                    (sceneId == null || sceneId == scene.Id) &&
                                    scene.ShortPlayers.FirstOrDefault(x => x.UserId == userId && !x.Left) != null);

            if (scene == null)
            {
                return(null);
            }

            var player       = scene.ShortPlayers.First(x => x.UserId == userId);
            var synchronizer = BattleHelper.GetFullSynchronizationData(scene, userId);

            BattleHelper.CalculateReward(ref synchronizer, scene, player.Id);
            return(synchronizer);
        }
Beispiel #3
0
        private void SynchronizationInfoEventHandler(object sender, ISyncEventArgs e)
        {
            var battleHub = _serviceProvider.GetRequiredService <IHubContext <ArenaHub.ArenaHub> >();

            string actionName = BattleHelper.GetBattleActionMethodName(e.Action);

            var uniqueUsers = e.Scene.ShortPlayers
                              .GroupBy(key => key.UserId, res => res, (key, res) => new
            {
                UserId  = key,
                Players = res
            })
                              .ToList();

            foreach (var userPlayers in uniqueUsers)
            {
                if (userPlayers.Players.All(x => x.Left))
                {
                    continue;
                }

                var user = battleHub.Clients.User(userPlayers.UserId);
                if (user != null)
                {
                    var synchronizer = BattleHelper.MapSynchronizer(e, userPlayers.UserId);
                    foreach (var player in userPlayers.Players)
                    {
                        if (BattleHelper.CalculateReward(ref synchronizer, e.Scene, player.Id))
                        {
                            Task.Run(async() => await PayRewardAsync(synchronizer.Reward, player.UserId));
                        }
                    }

                    battleHub.Clients.User(userPlayers.UserId).SendAsync(actionName, synchronizer);
                }
            }
        }