Exemple #1
0
        /// <summary>
        /// 退出
        /// </summary>
        /// <param name="managerId">The manager id.</param>
        /// <returns></returns>
        public MessageCodeResponse Leave(Guid managerId)
        {
            var crowd = GetCurrent();

            if (crowd == null || crowd.Status != 1)
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.CrowdNoData));
            }
            DateTime curTime = DateTime.Now;

            if (curTime < crowd.StartTime)
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.CrowdNotStart));
            }
            if (!IsManagerBusy(managerId))
            {
                if (CompetitorDic.ContainsKey(managerId))
                {
                    lock (_competitorLock)
                    {
                        CrosscrowdManagerEntity entity = null;
                        CompetitorDic.TryRemove(managerId, out entity);
                    }
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.Success));
                }
                else
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.Success));
                }
            }
            else
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.CrowdBusy));
            }
        }
Exemple #2
0
        public MessageCode HookAttend(LadderHookEntity entity)
        {
            if (!IsManagerBusy(entity.ManagerId))
            {
                if (!CompetitorDic.ContainsKey(entity.ManagerId))
                {
                    entity.LadderManager.UpdateTime = DateTime.Now;
                    //锁住
                    lock (_competitorLock)
                    {
                        if (_playerNum == 0)
                        {
                            StartTime = DateTime.Now;
                        }

                        CompetitorDic.Add(entity.ManagerId, entity.LadderManager);
                        _playerNum++;
                    }
                }
                return(MessageCode.Success);
            }
            else
            {
                return(MessageCode.LadderBusy);
            }
        }
        /// <summary>
        /// 天梯赛状态轮询.
        /// </summary>
        /// <param name="managerId">The manager id.</param>
        /// <returns></returns>
        public CrossLadderHeartResponse Heart(Guid managerId)
        {
            CrossLadderHeartResponse response;

            if (CompetitorDic.ContainsKey(managerId))
            {
                response = ResponseHelper.CreateSuccess <CrossLadderHeartResponse>();
            }
            else if (ManagerFightDic != null && ManagerFightDic.ContainsKey(managerId))
            {
                var heartEntity = ManagerFightDic[managerId];

                if (heartEntity == null)
                {
                    if (_status == EnumLadderStatus.Grouping)
                    {
                        response = ResponseHelper.Create <CrossLadderHeartResponse>(MessageCode.Success);
                    }
                    else
                    {
                        response = ResponseHelper.Create <CrossLadderHeartResponse>(MessageCode.Success);
                    }
                }
                else
                {
                    response      = ResponseHelper.Create <CrossLadderHeartResponse>(MessageCode.Success);
                    response.Data = heartEntity;
                }
            }
            else
            {
                var heartEntity = MemcachedFactory.LadderHeartClient.Get <CrossLadderHeartEntity>(managerId);
                if (heartEntity == null)
                {
                    return(ResponseHelper.Create <CrossLadderHeartResponse>(MessageCode.Success));
                }
                else
                {
                    response      = ResponseHelper.Create <CrossLadderHeartResponse>(MessageCode.Success);
                    response.Data = heartEntity;
                }
            }
            if (response.Data == null)
            {
                response.Data = new CrossLadderHeartEntity();
            }
            if (RecentlyAvgWaitSecond > 60)
            {
                response.Data.AvgWaitTime = 60;
            }
            else
            {
                response.Data.AvgWaitTime = RecentlyAvgWaitSecond;
            }

            return(response);
        }
        /// <summary>
        /// 报名天梯赛.
        /// </summary>
        /// <returns></returns>
        public MessageCodeResponse Attend(string siteId, Guid managerId)
        {
            if (!IsManagerBusy(managerId))
            {
                if (!CompetitorDic.ContainsKey(managerId))
                {
                    var response = CrossLadderCore.Instance.GetManagerInfo(siteId, managerId);
                    if (response.Code != ShareUtil.SuccessCode)
                    {
                        return(ResponseHelper.Create <MessageCodeResponse>(response.Code));
                    }
                    if (response.Data == null)
                    {
                        return(ResponseHelper.InvalidParameter <MessageCodeResponse>());
                    }
                    var ladderManager = response.Data;
                    //if (ladderManager.Stamina <= 0)
                    //{
                    //    return ResponseHelper.Create<MessageCodeResponse>(MessageCode.LadderStaminaShortage);
                    //}
                    var  kpi        = ManagerUtil.GetKpi(managerId, siteId);
                    bool needUpdate = false;
                    if (kpi != ladderManager.Kpi)
                    {
                        ladderManager.Kpi = kpi;
                        needUpdate        = true;
                    }
                    if (ladderManager.DomainId != _domainId)
                    {
                        ladderManager.DomainId = _domainId;
                        needUpdate             = true;
                    }
                    if (needUpdate)
                    {
                        CrossladderManagerMgr.Update(ladderManager);
                    }
                    response.Data.ShowName = ShareUtil.GetCrossManagerNameByZoneId(siteId, response.Data.Name);
                    //锁住
                    lock (_competitorLock)
                    {
                        if (_playerNum == 0)
                        {
                            _startTime = DateTime.Now;
                        }

                        CompetitorDic.Add(managerId, response.Data);
                        _playerNum++;
                    }
                }
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.Success));
            }
            else
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.LadderBusy));
            }
        }
Exemple #5
0
 /// <summary>
 /// 报名天梯赛.
 /// </summary>
 /// <returns></returns>
 public MessageCodeResponse AttendLadder(Guid managerId, bool hasTask, bool isGuide = false)
 {
     if (_ManagerMatchCD.ContainsKey(managerId))
     {
         if (_ManagerMatchCD[managerId] > DateTime.Now)
         {
             return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.LadderMatchCding));
         }
     }
     if (ManagerFightDic != null && ManagerFightDic.ContainsKey(managerId))
     {
         ManagerFightDic.Remove(managerId);
     }
     if (isGuide) //引导
     {
         var response = GuideMatch(managerId);
         if (response.Code == (int)MessageCode.Success)
         {
             return(response);
         }
     }
     if (!CompetitorDic.ContainsKey(managerId))
     {
         var manager = ManagerCore.Instance.GetManager(managerId);
         if (manager == null)
         {
             return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.LoginNoManager));
         }
         var arenaManager = InnerGetLadderManager(managerId);
         if (arenaManager == null)
         {
             return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NbParameterError));
         }
         arenaManager.IsBot      = false;
         arenaManager.Name       = manager.Name;
         arenaManager.UpdateTime = DateTime.Now;
         arenaManager.HasTask    = true;
         //锁住
         lock (_competitorLock)
         {
             if (_playerNum == 0)
             {
                 StartTime = DateTime.Now;
             }
             CompetitorDic.Add(managerId, arenaManager);
             _playerNum++;
         }
     }
     return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.Success));
 }
Exemple #6
0
 /// <summary>
 /// 状态轮询.
 /// </summary>
 /// <param name="managerId">The manager id.</param>
 /// <returns></returns>
 public CrowdHeartResponse Heart(Guid managerId)
 {
     if (CompetitorDic.ContainsKey(managerId))
     {
         ////锁住
         //lock (_competitorLock)
         //{
         //    if (CompetitorDic.ContainsKey(managerId))
         //    {
         //        CompetitorDic[managerId].UpdateTime = DateTime.Now;
         //    }
         //}
         return(ResponseHelper.CreateSuccess <CrowdHeartResponse>());
     }
     else if (ManagerFightDic != null && ManagerFightDic.ContainsKey(managerId))
     {
         var heartEntity = ManagerFightDic[managerId];
         if (heartEntity == null)
         {
             if (_status == EnumLadderStatus.Grouping)
             {
                 return(ResponseHelper.Create <CrowdHeartResponse>(MessageCode.Success));
             }
             else
             {
                 return(ResponseHelper.Create <CrowdHeartResponse>(MessageCode.Success));
             }
         }
         else
         {
             var response = ResponseHelper.Create <CrowdHeartResponse>(MessageCode.Success);
             response.Data = heartEntity;
             return(response);
         }
     }
     else
     {
         var heartEntity = MemcachedFactory.CrowdHeartClient.Get <CrowdHeartEntity>(managerId);
         if (heartEntity == null)
         {
             return(ResponseHelper.Create <CrowdHeartResponse>(MessageCode.Success));
         }
         else
         {
             var response = ResponseHelper.Create <CrowdHeartResponse>(MessageCode.Success);
             response.Data = heartEntity;
             return(response);
         }
     }
 }
Exemple #7
0
 /// <summary>
 /// 将已进入比赛池的经理重新丢回排序池.
 /// </summary>
 /// <param name="arenaCompetitor">The arena competitor.</param>
 public void PushFightToCompetitor(LadderManagerEntity arenaCompetitor)
 {
     lock (_competitorLock)
     {
         if (ManagerFightDic != null && ManagerFightDic.ContainsKey(arenaCompetitor.ManagerId))
         {
             ManagerFightDic.Remove(arenaCompetitor.ManagerId);
             if (!CompetitorDic.ContainsKey(arenaCompetitor.ManagerId))
             {
                 if (_playerNum == 0)
                 {
                     StartTime = DateTime.Now;
                 }
                 CompetitorDic.Add(arenaCompetitor.ManagerId, arenaCompetitor);
                 _playerNum++;
             }
         }
     }
 }
Exemple #8
0
        public MessageCodeResponse Attend(string siteId, Guid managerId)
        {
            var crowd = GetCurrent();

            if (crowd == null || crowd.Status != 1)
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.CrowdNoData));
            }
            DateTime curTime = DateTime.Now;

            if (curTime < crowd.StartTime)
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.CrowdNotStart));
            }
            if (IsManagerBusy(managerId))
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.CrowdBusy));
            }
            if (!CompetitorDic.ContainsKey(managerId))
            {
                var response = CrossCrowdCore.Instance.GetManagerInfo(siteId, managerId, crowd.Idx, curTime);
                if (response.Code != (int)MessageCode.Success)
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(response.Code));
                }
                lock (_competitorLock)
                {
                    if (CompetitorDic.Count == 0)
                    {
                        _startTime = DateTime.Now;
                    }
                    CompetitorDic.TryAdd(managerId, response.Data);
                    CrowdManagerDic.TryAdd(managerId, 1);
                    _crowdInfo.PlayerCount = CrowdManagerDic.Count;
                }
                return(ResponseHelper.CreateSuccess <MessageCodeResponse>());
            }
            else
            {
                return(ResponseHelper.CreateSuccess <MessageCodeResponse>());
            }
        }
Exemple #9
0
 /// <summary>
 /// 退出天梯赛.
 /// </summary>
 /// <param name="managerId">The manager id.</param>
 /// <returns></returns>
 public MessageCodeResponse LeaveLadder(Guid managerId)
 {
     if (!IsManagerBusy(managerId))
     {
         if (CompetitorDic.ContainsKey(managerId))
         {
             lock (_competitorLock)
             {
                 _playerNum--;
                 CompetitorDic.Remove(managerId);
             }
             return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.Success));
         }
         else
         {
             return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NbParameterError));
         }
     }
     else
     {
         return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.LadderCountdown));
     }
 }
Exemple #10
0
        /// <summary>
        /// 天梯赛状态轮询.
        /// </summary>
        /// <param name="managerId">The manager id.</param>
        /// <returns></returns>
        public Ladder_HeartResponse LadderHeart(Guid managerId)
        {
            Ladder_HeartResponse response;

            if (CompetitorDic.ContainsKey(managerId))
            {
                //锁住
                //lock (_competitorLock)
                //{
                //    if (CompetitorDic.ContainsKey(managerId))
                //    {
                //        CompetitorDic[managerId].UpdateTime = DateTime.Now;
                //    }
                //}
                response = ResponseHelper.CreateSuccess <Ladder_HeartResponse>();
            }
            else if (ManagerFightDic != null && ManagerFightDic.ContainsKey(managerId))
            {
                var matchId = ManagerFightDic[managerId];

                if (matchId == Guid.Empty)
                {
                    if (Status == EnumLadderStatus.Grouping)
                    {
                        response = ResponseHelper.Create <Ladder_HeartResponse>(MessageCode.Success);
                    }
                    else
                    {
                        response = ResponseHelper.Create <Ladder_HeartResponse>(MessageCode.NbParameterError);
                    }
                }
                else
                {
                    response              = ResponseHelper.Create <Ladder_HeartResponse>(MessageCode.Success);
                    response.Data         = new Ladder_Heart();
                    response.Data.MatchId = matchId;
                }
            }
            else if (ManagerGuideFightDic != null && ManagerGuideFightDic.ContainsKey(managerId))//引导比赛
            {
                var matchId = ManagerGuideFightDic[managerId];
                response              = ResponseHelper.Create <Ladder_HeartResponse>(MessageCode.Success);
                response.Data         = new Ladder_Heart();
                response.Data.MatchId = matchId;
                if (ManagerGuideFightDic.ContainsKey(managerId))
                {
                    ManagerGuideFightDic.Remove(managerId);
                }
            }
            else
            {
                response = ResponseHelper.Create <Ladder_HeartResponse>(MessageCode.NbParameterError);
            }
            if (response.Data == null)
            {
                response.Data = new Ladder_Heart();
            }
            if (RecentlyAvgWaitSecond > 60)
            {
                response.Data.AvgWaitTime = 60;
            }
            else
            {
                response.Data.AvgWaitTime = RecentlyAvgWaitSecond;
            }

            return(response);
        }