public async Task <GameSubActInfo> GetGameActProgress(DateTime time, long id, string activityId, string subId) { GameSubActInfo subAct = await RedisOpt.GetHashValueAsync <GameSubActInfo> (KeyGenTool.GenUserDayKey(time, id, "GameActivity", activityId), subId); return(subAct); }
public async Task <List <OneGameActivityInfoVM> > Handle(GameActivityCommand request, CancellationToken cancellationToken) { //通过配置获取今天所有的打牌活动activeId; DateTime tnow = DateTime.Now; List <Task <OneGameActivityInfo> > tasks = new List <Task <OneGameActivityInfo> >(); foreach (var oneActivitty in _activityConfig.AllGameConfigs) { if (oneActivitty.ActivityType == request.Type) { tasks.Add(_redis.GetGameActivity(tnow, request.Id, oneActivitty.ActivityId)); } } await Task.WhenAll(tasks); List <OneGameActivityInfo> playActivityInfos = tasks.Select(x => x.Result).ToList(); List <OneGameActivityInfoVM> gameActivityVMs = new List <OneGameActivityInfoVM>(); foreach (var one in playActivityInfos) { var oneConfig = _activityConfig.AllGameConfigs.Find(x => x.ActivityId == one.ActivityId); var roomList = new List <OneRoomActivityInfoVM>(); foreach (var oneRoom in oneConfig.RoomConfigs) { if (!one.CountProgress.TryGetValue(oneRoom.SubId, out var subAct)) { subAct = new GameSubActInfo(0, 0); } OneRoomActivityInfoVM oneRoomInfo = new OneRoomActivityInfoVM() { CurCount = subAct.CurCount, State = subAct.State, NeedCount = oneRoom.NeedCount, RewardCoins = oneRoom.RewardCoins, SubId = oneRoom.SubId, Title = oneRoom.Title }; roomList.Add(oneRoomInfo); } OneGameActivityInfoVM oneInfo = new OneGameActivityInfoVM(one.ActivityId, oneConfig.Title, roomList); gameActivityVMs.Add(oneInfo); } return(gameActivityVMs); }
public void DealOneRoom(DateTime time, List <long> players, string actId, string subId) { ParallelLoopResult result = Parallel.ForEach(players, async player => { using var locker = _redis.Locker(KeyGenTool.GenUserDayKey(time, player, "GameActivity", actId)); await locker.LockAsync(); var oneSub = await _redis.GetGameActProgress(time, player, actId, subId); if (oneSub == null) { oneSub = new GameSubActInfo(0, 0); } if (oneSub.State == 1) { return; } ++oneSub.CurCount; await _redis.SetGameActProgress(time, player, actId, subId, oneSub); }); }
public Task SetGameActProgress(DateTime time, long id, string activityId, string subId, GameSubActInfo subAct) { return(RedisOpt.AddHashValueAsync(KeyGenTool.GenUserDayKey(time, id, "GameActivity", activityId), subId, subAct, TimeSpan.FromDays(1))); }