bool HookEnd(Guid managerId, int hookStatus)
 {
     if (CrossladderHookMgr.End(managerId, hookStatus))
     {
         var e = new CrossladderHookEntity();
         _hookDic.TryRemove(managerId, out e);
         return(true);
     }
     return(false);
 }
        private void CreateHook()
        {
            _hookListDic  = new ConcurrentDictionary <Guid, List <LadderHook> >();
            _ladderHookCD = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.LadderHookCD);
            _hookExpired  = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.LadderHookExpired);
            var list = CrossladderHookMgr.GetList();

            _hookDic = new ConcurrentDictionary <Guid, CrossladderHookEntity>();
            foreach (var entity in list)
            {
                if (HookEndCheck(entity))
                {
                    HookEnd(entity.ManagerId, EnumHookStatus.Exception);
                }
                else
                {
                    AddToDic(entity);
                }
            }
        }
        public LadderHookInfoResponse StartHook(Guid managerId, string siteId, int maxTimes, int minScore, int maxScore, int winTimes)
        {
            if (maxTimes < 1 && minScore < 1 && maxScore < 1 && winTimes < 1)
            {
                return(ResponseHelper.Create <LadderHookInfoResponse>(MessageCode.NbParameterError));
            }
            if (IsExists(managerId))
            {
                return(ResponseHelper.Create <LadderHookInfoResponse>(MessageCode.Success));
            }

            var hook          = CrossladderHookMgr.GetById(managerId, siteId);
            var nextMatchTime = DateTime.Now.AddSeconds(_ladderHookCD);
            var curTime       = DateTime.Now;

            hook.UpdateTime     = curTime;
            hook.RowTime        = curTime;
            hook.NextMatchTime  = nextMatchTime;
            hook.Status         = 0;
            hook.CurTimes       = 0;
            hook.CurWiningTimes = 0;
            hook.MaxTimes       = maxTimes;
            hook.MinScore       = minScore;
            hook.MaxScore       = maxScore;
            hook.MaxWiningTimes = winTimes;
            hook.Expired        = curTime.AddMinutes(_hookExpired);
            if (CrossladderHookMgr.Update(hook))
            {
                AddToDic(hook);
                return(BuildHookInfoResponse(hook, true));
            }
            else
            {
                return(ResponseHelper.Create <LadderHookInfoResponse>(MessageCode.NbUpdateFail));
            }
        }
 /// <summary>
 /// 更新挂机信息
 /// </summary>
 /// <param name="managerId">经理ID</param>
 /// <param name="score">获得积分</param>
 /// <param name="isWin">是否胜利</param>
 /// <param name="homtScore">主队进球数</param>
 /// <param name="awayScore">客队进球数</param>
 /// <param name="homeName">主队名</param>
 /// <param name="awayName">客队名</param>
 /// <param name="myCoin">获得金币</param>
 public void UpdateHookScore(Guid managerId, int score, bool isWin, int homtScore, int awayScore, string homeName, string awayName, int myCoin)
 {
     try
     {
         CrossladderHookEntity entity = null;
         _hookDic.TryGetValue(managerId, out entity);
         if (entity != null)
         {
             if (entity.LadderManager != null)
             {
                 entity.LadderManager.Score += score;
                 entity.Score = entity.LadderManager.Score;
             }
             else
             {
                 entity.Score += score;
             }
             entity.CurTimes++;
             if (isWin)
             {
                 entity.CurWiningTimes++;
             }
             try
             {
                 if (_hookListDic == null)
                 {
                     _hookListDic = new ConcurrentDictionary <Guid, List <LadderHook> >();
                 }
                 if (!_hookListDic.ContainsKey(managerId))
                 {
                     _hookListDic.TryAdd(managerId, new List <LadderHook>());
                 }
                 if (_hookListDic[managerId].Count >= 10)
                 {
                     _hookListDic[managerId].RemoveAt(0);
                 }
                 LadderHook hookrecord = new LadderHook();
                 hookrecord.HomeName   = homeName;
                 hookrecord.AwayName   = awayName;
                 hookrecord.HomeScore  = homtScore;
                 hookrecord.AwayScore  = awayScore;
                 hookrecord.MyCoin     = myCoin;
                 hookrecord.MyIntegral = score;
                 _hookListDic[managerId].Add(hookrecord);
             }
             catch (Exception e)
             {
             }
             if (HookEndCheck(entity))
             {
                 HookEnd(managerId, entity.Status);
             }
             else
             {
                 CrossladderHookMgr.Update(entity);
             }
         }
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("UpdateLadderHookInfo", ex);
     }
 }