コード例 #1
0
 void Handle(BaseMatchData matchData, MatchStateCallback callback, object matchState = null)
 {
     if (null == matchData || matchData.Home == null || matchData.Away == null)
     {
         matchData.ErrorCode = (int)MessageCode.NbParameterError;
         return;
     }
     HandleMatch(matchData, callback, matchState);
 }
コード例 #2
0
 public MessageCode CreateMatchAsyn(BaseMatchData stateObj, MatchStateCallback callback, object matchState = null)
 {
     if (null == stateObj || stateObj.Home == null || stateObj.Away == null)
     {
         return(MessageCode.MatchStateObjisNull);
     }
     stateObj.ErrorCode = (int)MessageCode.MatchWait;
     stateObj.RowTime   = DateTime.Now;
     MemcachedFactory.MatchClient.Set <BaseMatchData>(stateObj.MatchId, stateObj);
     //_poolMatch.Add(() => Handle(stateObj,callback));
     PushMatch(stateObj, callback, matchState);
     return(MessageCode.Success);
 }
コード例 #3
0
        void PushMatch(BaseMatchData matchData, MatchStateCallback callback, object matchState = null)
        {
            EnumMatchType castMatchType = EnumMatchType.None;

            switch ((EnumMatchType)matchData.MatchType)
            {
            case EnumMatchType.Tour:
            case EnumMatchType.TourElite:
            case EnumMatchType.WorldChallenge:
                castMatchType = EnumMatchType.Tour;
                break;

            case EnumMatchType.Ladder:
            case EnumMatchType.Dailycup:
            case EnumMatchType.League:
            case EnumMatchType.Champion:
                castMatchType = (EnumMatchType)matchData.MatchType;
                break;

            case EnumMatchType.Crowd:
            case EnumMatchType.CrossCrowd:
            case EnumMatchType.Peak:
            case EnumMatchType.CrossPeak:
            case EnumMatchType.GuildWar:
                castMatchType = EnumMatchType.Crowd;
                break;

            default:
                castMatchType = EnumMatchType.None;
                break;
            }
            NBThreadPool pool = null;

            if (!s_dicMatchPool.TryGetValue(castMatchType, out pool) || null == pool)
            {
                pool = _poolMatch;
            }
            pool.Add(() => Handle(matchData, callback, matchState));
        }
コード例 #4
0
        void HandleMatch(BaseMatchData matchData, MatchStateCallback callback, object matchState = null)
        {
            MatchInput transferMatchEntity = null;

            try
            {
                transferMatchEntity = MatchTransferUtil.BuildTransferMatch(matchData);
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("MatchCore:HandleSingle-TransferMatchDataModel", string.Format("MatchType:{0}", matchData.MatchType), ex);
                matchData.ErrorCode = (int)MessageCode.MatchCreateFail;
                return;
            }

            if (null == transferMatchEntity || null == transferMatchEntity.HomeManager || null == transferMatchEntity.AwayManager)
            {
                matchData.ErrorCode = (int)MessageCode.MatchCreateFail;
            }
            else
            {
                byte[] process = null;
                try
                {
                    if (matchData.Home.ManagerId == new Guid("BC214997-FB0B-41D3-A3AC-A58B00B092D8") || matchData.Away.ManagerId == new Guid("BC214997-FB0B-41D3-A3AC-A58B00B092D8"))
                    {
                        LogHelper.Insert("LeagueMatch Id1 " + matchData.MatchId, LogType.Info);
                    }

                    process = Exec(matchData, transferMatchEntity);
                }
                catch (Exception ex)
                {
                    SystemlogMgr.Error("MatchCore:HandleSingle-Exec", ex);
                }

                if (matchData.ErrorCode == (int)MessageCode.Success && process != null)
                {
                    try
                    {
                        MemcachedFactory.MatchClient.Set <BaseMatchData>(matchData.MatchId, matchData);
                        if (!s_noCacheMatchTypes.ContainsKey((EnumMatchType)matchData.MatchType))
                        {
                            MemcachedFactory.MatchProcessClient.Set <byte[]>(matchData.MatchId, process);
                        }
                        if (s_DbMatchTypes.ContainsKey((EnumMatchType)matchData.MatchType))
                        {
                            MatchDataCore.Instance.SaveProcess(matchData.MatchId, matchData.MatchType, process, matchData.RowTime);
                        }
                        if (callback != null)
                        {
                            matchData.ErrorCode = (int)callback(matchData, matchState);
                            if (matchData.ErrorCode != 0)
                            {
                                LogHelper.Insert(string.Format("match callback fail,matchId:{0},errorCode:{1},home:{2},away:{3}", matchData.MatchId, matchData.ErrorCode, matchData.Home.Name, matchData.Away.Name), LogType.Info);
                            }
                        }
                        //MatchReward
                        if (matchData.ErrorCode == 0 && ShareUtil.IsAppRXYC && CheckRewardMatchType(matchData.MatchType))
                        {
                            Guid   mid  = (matchData.Home.IsNpc || matchData.Home.IsBot) ? matchData.Away.ManagerId : matchData.Home.ManagerId;
                            string key  = string.Concat(mid, ".", matchData.MatchType).ToLower();
                            var    data = new DTOMatchRewardState()
                            {
                                MatchId = matchData.MatchId, Coin = -1, Point = -1
                            };
                            MemcachedFactory.MatchRewardClient.Set(key, data);
                        }
                        return;
                    }
                    catch (Exception ex)
                    {
                        SystemlogMgr.Error("MatchCore:HandleSingle-Save", ex);
                        matchData.ErrorCode = (int)MessageCode.MatchCreateFail;
                    }
                }
                else
                {
                    matchData.ErrorCode = (int)MessageCode.MatchCreateFail;
                }
            }
            MemcachedFactory.MatchClient.Set <BaseMatchData>(matchData.MatchId, matchData);
        }