/// <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)); } }
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)); } }
/// <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)); }
/// <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); } } }
/// <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++; } } } }
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>()); } }
/// <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)); } }
/// <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); }