Ejemplo n.º 1
0
        private KFSpreadData GetSpreadData(int pzoneID, int proleID)
        {
            KFSpreadKey  pkey  = KFSpreadKey.Get(pzoneID, proleID);
            KFSpreadData pData = null;

            if (!_spreadDataDic.TryGetValue(pkey, out pData))
            {
                bool isSign = SpreadPersistence.Instance.DBSpreadSignCheck(pzoneID, proleID);
                if (!isSign)
                {
                    return(null);
                }

                pData = new KFSpreadData()
                {
                    ServerID   = 0,
                    ZoneID     = pzoneID,
                    RoleID     = proleID,
                    CountRole  = SpreadPersistence.Instance.DBSpreadCountAll(pzoneID, proleID),
                    CountVip   = SpreadPersistence.Instance.DBSpreadCountVip(pzoneID, proleID),
                    CountLevel = SpreadPersistence.Instance.DBSpreadCountLevel(pzoneID, proleID),
                };

                _spreadDataDic.TryAdd(pkey, pData);
            }

            if (pData != null)
            {
                pData.UpdateLogtime();
            }
            return(pData);
        }
Ejemplo n.º 2
0
        public int SpreadSign(int serverID, int zoneID, int roleID)
        {
            int result;

            if (!this.IsAgent(serverID))
            {
                result = -5;
            }
            else
            {
                KFSpreadKey  key = KFSpreadKey.Get(zoneID, roleID);
                KFSpreadData oldData;
                if (this._spreadDataDic.TryGetValue(key, out oldData))
                {
                    oldData.UpdateLogtime();
                    result = -21;
                }
                else if (!SpreadPersistence.Instance.DBSpreadSign(zoneID, roleID))
                {
                    result = -1;
                }
                else
                {
                    oldData = new KFSpreadData
                    {
                        ServerID = serverID,
                        ZoneID   = zoneID,
                        RoleID   = roleID
                    };
                    this._spreadDataDic.TryAdd(key, oldData);
                    result = 1;
                }
            }
            return(result);
        }
Ejemplo n.º 3
0
        public bool SpreadVip(int pzoneID, int proleID, int czoneID, int croleID)
        {
            //推广员
            KFSpreadData pData = GetSpreadData(pzoneID, proleID);

            if (pData == null)
            {
                return(false);
            }
            pData.UpdateLogtime();

            //推广员
            lock (pData)
            {
                bool result = SpreadPersistence.Instance.DBSpreadIsVip(pzoneID, proleID, czoneID, croleID);
                if (result)
                {
                    pData.CountVip += 1;
                    if (pData.ServerID > 0)
                    {
                        NotifySpreadData(pData);
                    }

                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 4
0
        public int SpreadSign(int serverID, int zoneID, int roleID)
        {
            if (!IsAgent(serverID))
            {
                return((int)ESpreadState.EServer);
            }

            KFSpreadKey  key = KFSpreadKey.Get(zoneID, roleID);
            KFSpreadData oldData;

            if (_spreadDataDic.TryGetValue(key, out oldData))
            {
                oldData.UpdateLogtime();
                return((int)ESpreadState.ESpreadIsSign);
            }

            bool result = SpreadPersistence.Instance.DBSpreadSign(zoneID, roleID);

            if (!result)
            {
                return((int)ESpreadState.Fail);
            }

            //添加或更新
            oldData = new KFSpreadData()
            {
                ServerID = serverID,
                ZoneID   = zoneID,
                RoleID   = roleID,
            };

            _spreadDataDic.TryAdd(key, oldData);
            return((int)ESpreadState.Success);
        }
Ejemplo n.º 5
0
        public bool SpreadVip(int pzoneID, int proleID, int czoneID, int croleID)
        {
            KFSpreadData pData = this.GetSpreadData(pzoneID, proleID);
            bool         result2;

            if (pData == null)
            {
                result2 = false;
            }
            else
            {
                pData.UpdateLogtime();
                lock (pData)
                {
                    bool result = SpreadPersistence.Instance.DBSpreadIsVip(pzoneID, proleID, czoneID, croleID);
                    if (result)
                    {
                        pData.CountVip++;
                        if (pData.ServerID > 0)
                        {
                            this.NotifySpreadData(pData);
                        }
                        return(true);
                    }
                }
                result2 = false;
            }
            return(result2);
        }
Ejemplo n.º 6
0
        public int TelCodeVerify(int serverID, int czoneID, int croleID, int telCode)
        {
            if (!IsAgent(serverID))
            {
                return((int)ESpreadState.EServer);
            }

            KFSpreadKey        ckey       = KFSpreadKey.Get(czoneID, croleID);
            KFSpreadVerifyData verifyData = null;

            if (!_spreadVerifyDataDic.TryGetValue(ckey, out verifyData))
            {
                return((int)ESpreadState.EVerifyNo);
            }

            //推广员
            KFSpreadData pData = GetSpreadData(verifyData.PZoneID, verifyData.PRoleID);

            if (pData == null)
            {
                return((int)ESpreadState.EVerifyCodeWrong);
            }
            pData.UpdateLogtime();

            if (verifyData.TelCode != telCode)
            {
                return((int)ESpreadState.ETelCodeWrong);
            }

            if (DateTime.Now.AddSeconds(-TEL_CODE_OUT_TIME) > verifyData.TelTime)
            {
                return((int)ESpreadState.ETelCodeOutTime);
            }

            //验证成功加数据库
            bool result = SpreadPersistence.Instance.DBSpreadRoleAdd(
                verifyData.PZoneID, verifyData.PRoleID, verifyData.CUserID, verifyData.CZoneID, verifyData.CRoleID, verifyData.Tel, verifyData.IsVip, verifyData.IsLevel);

            if (!result)
            {
                return((int)ESpreadState.Fail);
            }

            //推广员
            lock (pData)
            {
                pData.CountLevel += verifyData.IsLevel;
                pData.CountVip   += verifyData.IsVip;
                pData.CountRole  += 1;

                if (pData.ServerID > 0)
                {
                    NotifySpreadData(pData);
                }
            }

            _spreadVerifyDataDic.TryRemove(ckey, out verifyData);
            return((int)ESpreadState.Success);
        }
Ejemplo n.º 7
0
        public int TelCodeVerify(int serverID, int czoneID, int croleID, int telCode)
        {
            int result;

            if (!this.IsAgent(serverID))
            {
                result = -5;
            }
            else
            {
                KFSpreadKey        ckey       = KFSpreadKey.Get(czoneID, croleID);
                KFSpreadVerifyData verifyData = null;
                if (!this._spreadVerifyDataDic.TryGetValue(ckey, out verifyData))
                {
                    result = -10;
                }
                else
                {
                    KFSpreadData pData = this.GetSpreadData(verifyData.PZoneID, verifyData.PRoleID);
                    if (pData == null)
                    {
                        result = -14;
                    }
                    else
                    {
                        pData.UpdateLogtime();
                        if (verifyData.TelCode != telCode)
                        {
                            result = -34;
                        }
                        else if (TimeUtil.NowDateTime().AddSeconds(-90.0) > verifyData.TelTime)
                        {
                            result = -35;
                        }
                        else if (!SpreadPersistence.Instance.DBSpreadRoleAdd(verifyData.PZoneID, verifyData.PRoleID, verifyData.CUserID, verifyData.CZoneID, verifyData.CRoleID, verifyData.Tel, verifyData.IsVip, verifyData.IsLevel))
                        {
                            result = -1;
                        }
                        else
                        {
                            lock (pData)
                            {
                                pData.CountLevel += verifyData.IsLevel;
                                pData.CountVip   += verifyData.IsVip;
                                pData.CountRole++;
                                if (pData.ServerID > 0)
                                {
                                    this.NotifySpreadData(pData);
                                }
                            }
                            this._spreadVerifyDataDic.TryRemove(ckey, out verifyData);
                            result = 1;
                        }
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 8
0
        public int CheckVerifyCode(int cserverID, string cuserID, int czoneID, int croleID, int pzoneID, int proleID, int isVip, int isLevel)
        {
            if (!IsAgent(cserverID))
            {
                return((int)ESpreadState.EServer);
            }

            //推广员
            KFSpreadData pData = GetSpreadData(pzoneID, proleID);

            if (pData == null)
            {
                return((int)ESpreadState.EVerifyCodeWrong);
            }

            //已验证
            bool isVerify = SpreadPersistence.Instance.DBSpreadVeruftCheck(czoneID, croleID, cuserID);

            if (isVerify)
            {
                return((int)ESpreadState.EVerifyCodeHave);
            }

            //角色验证统计
            KFSpreadRoleTotal roleTotalData = GetRoleTotalData(cserverID, czoneID, croleID);

            if (roleTotalData.IsStop)
            {
                return((int)ESpreadState.EVerifyMore);
            }

            //验证信息
            KFSpreadKey        ckey       = KFSpreadKey.Get(czoneID, croleID);
            KFSpreadVerifyData verifyData = null;

            _spreadVerifyDataDic.TryRemove(ckey, out verifyData);

            verifyData = new KFSpreadVerifyData()
            {
                CUserID   = cuserID,
                CServerID = cserverID,
                CZoneID   = czoneID,
                CRoleID   = croleID,

                PZoneID = pzoneID,
                PRoleID = proleID,
                IsVip   = isVip,
                IsLevel = isLevel,
            };

            _spreadVerifyDataDic.TryAdd(ckey, verifyData);

            return((int)ESpreadState.Success);
        }
Ejemplo n.º 9
0
 private void NotifySpreadData(KFSpreadData data)
 {
     ClientAgentManager.Instance().PostAsyncEvent(data.ServerID, this.GameType, new AsyncDataItem(KuaFuEventTypes.SpreadCount, new object[]
     {
         data.ZoneID,
         data.RoleID,
         data.CountRole,
         data.CountVip,
         data.CountLevel
     }));
 }
Ejemplo n.º 10
0
        public int CheckVerifyCode(int cserverID, string cuserID, int czoneID, int croleID, int pzoneID, int proleID, int isVip, int isLevel)
        {
            int result;

            if (!this.IsAgent(cserverID))
            {
                result = -5;
            }
            else
            {
                KFSpreadData pData = this.GetSpreadData(pzoneID, proleID);
                if (pData == null)
                {
                    result = -14;
                }
                else
                {
                    bool isVerify = SpreadPersistence.Instance.DBSpreadVeruftCheck(czoneID, croleID, cuserID);
                    if (isVerify)
                    {
                        result = -12;
                    }
                    else
                    {
                        KFSpreadRoleTotal roleTotalData = this.GetRoleTotalData(cserverID, czoneID, croleID, false);
                        if (roleTotalData.IsStop)
                        {
                            result = -16;
                        }
                        else
                        {
                            KFSpreadKey        ckey       = KFSpreadKey.Get(czoneID, croleID);
                            KFSpreadVerifyData verifyData = null;
                            this._spreadVerifyDataDic.TryRemove(ckey, out verifyData);
                            verifyData = new KFSpreadVerifyData
                            {
                                CUserID   = cuserID,
                                CServerID = cserverID,
                                CZoneID   = czoneID,
                                CRoleID   = croleID,
                                PZoneID   = pzoneID,
                                PRoleID   = proleID,
                                IsVip     = isVip,
                                IsLevel   = isLevel
                            };
                            this._spreadVerifyDataDic.TryAdd(ckey, verifyData);
                            result = 1;
                        }
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 11
0
        public int SpreadSign(int zoneID, int roleID)
        {
            int result;

            try
            {
                lock (_Mutex)
                {
                    KFSpreadData data;
                    //如果取到数据,证明已经注册说了
                    if (_RoleId2KFSpreadDataDict.TryGetValue(roleID, out data))
                    {
                        return(0);
                    }

                    ISpreadService kuaFuService = GetKuaFuService();
                    if (null == kuaFuService)
                    {
                        return(StdErrorCode.Error_Server_Not_Registed);
                    }

                    try
                    {
                        result = kuaFuService.SpreadSign(_ClientInfo.ServerId, zoneID, roleID);
                        if (result > 0)
                        {
                            KFSpreadData newData = new KFSpreadData();
                            newData.ServerID = _ClientInfo.ServerId;
                            newData.ZoneID   = zoneID;
                            newData.RoleID   = roleID;

                            _RoleId2KFSpreadDataDict.TryAdd(roleID, newData);
                        }
                    }
                    catch (System.Exception ex)
                    {
                        ResetKuaFuService();
                    }
                }
            }
            catch (System.Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }

            return(StdErrorCode.Error_Success);
        }
Ejemplo n.º 12
0
 public int[] SpreadCount(int zoneID, int roleID)
 {
     int[] array  = new int[3];
     int[] counts = array;
     lock (this._Mutex)
     {
         KFSpreadData data;
         if (this._RoleId2KFSpreadDataDict.TryGetValue(roleID, out data))
         {
             data.UpdateLogtime();
             return(new int[]
             {
                 data.CountRole,
                 data.CountVip,
                 data.CountLevel
             });
         }
         ISpreadService kuaFuService = this.GetKuaFuService(false);
         if (null == kuaFuService)
         {
             return(counts);
         }
         try
         {
             counts = kuaFuService.SpreadCount(this._ClientInfo.ServerId, zoneID, roleID);
             if (counts != null && counts.Length == 3)
             {
                 KFSpreadData newData = new KFSpreadData();
                 newData.ServerID   = this._ClientInfo.ServerId;
                 newData.ZoneID     = zoneID;
                 newData.RoleID     = roleID;
                 newData.CountRole  = counts[0];
                 newData.CountVip   = counts[1];
                 newData.CountLevel = counts[2];
                 this._RoleId2KFSpreadDataDict.TryAdd(roleID, newData);
             }
         }
         catch (Exception ex)
         {
             this.ResetKuaFuService();
         }
     }
     return(counts);
 }
Ejemplo n.º 13
0
 public int[] SpreadCount(int serverID, int zoneID, int roleID)
 {
     int[] array  = new int[3];
     int[] result = array;
     int[] result2;
     if (!this.IsAgent(serverID))
     {
         result2 = result;
     }
     else
     {
         KFSpreadKey  key = KFSpreadKey.Get(zoneID, roleID);
         KFSpreadData oldData;
         if (this._spreadDataDic.TryGetValue(key, out oldData))
         {
             result[0] = oldData.CountRole;
             result[1] = oldData.CountVip;
             result[2] = oldData.CountLevel;
             oldData.UpdateLogtime();
             result2 = result;
         }
         else
         {
             result[0] = SpreadPersistence.Instance.DBSpreadCountAll(zoneID, roleID);
             result[1] = SpreadPersistence.Instance.DBSpreadCountVip(zoneID, roleID);
             result[2] = SpreadPersistence.Instance.DBSpreadCountLevel(zoneID, roleID);
             oldData   = new KFSpreadData
             {
                 ServerID   = serverID,
                 ZoneID     = zoneID,
                 RoleID     = roleID,
                 CountRole  = result[0],
                 CountVip   = result[1],
                 CountLevel = result[2]
             };
             this._spreadDataDic.TryAdd(key, oldData);
             result2 = result;
         }
     }
     return(result2);
 }
Ejemplo n.º 14
0
        public int[] SpreadCount(int serverID, int zoneID, int roleID)
        {
            int[] result = new int[] { 0, 0, 0 };

            if (!IsAgent(serverID))
            {
                return(result);
            }

            KFSpreadKey  key = KFSpreadKey.Get(zoneID, roleID);
            KFSpreadData oldData;

            if (_spreadDataDic.TryGetValue(key, out oldData))
            {
                result[0] = oldData.CountRole;
                result[1] = oldData.CountVip;
                result[2] = oldData.CountLevel;

                oldData.UpdateLogtime();
                return(result);
            }

            result[0] = SpreadPersistence.Instance.DBSpreadCountAll(zoneID, roleID);
            result[1] = SpreadPersistence.Instance.DBSpreadCountVip(zoneID, roleID);
            result[2] = SpreadPersistence.Instance.DBSpreadCountLevel(zoneID, roleID);

            //添加或更新
            oldData = new KFSpreadData()
            {
                ServerID   = serverID,
                ZoneID     = zoneID,
                RoleID     = roleID,
                CountRole  = result[0],
                CountVip   = result[1],
                CountLevel = result[2],
            };

            _spreadDataDic.TryAdd(key, oldData);
            return(result);
        }
Ejemplo n.º 15
0
 public int SpreadSign(int zoneID, int roleID)
 {
     try
     {
         lock (this._Mutex)
         {
             KFSpreadData data;
             if (this._RoleId2KFSpreadDataDict.TryGetValue(roleID, out data))
             {
                 return(0);
             }
             ISpreadService kuaFuService = this.GetKuaFuService(false);
             if (null == kuaFuService)
             {
                 return(-11001);
             }
             try
             {
                 int result = kuaFuService.SpreadSign(this._ClientInfo.ServerId, zoneID, roleID);
                 if (result > 0)
                 {
                     KFSpreadData newData = new KFSpreadData();
                     newData.ServerID = this._ClientInfo.ServerId;
                     newData.ZoneID   = zoneID;
                     newData.RoleID   = roleID;
                     this._RoleId2KFSpreadDataDict.TryAdd(roleID, newData);
                 }
             }
             catch (Exception ex)
             {
                 this.ResetKuaFuService();
             }
         }
     }
     catch (Exception ex)
     {
         LogManager.WriteExceptionUseCache(ex.ToString());
     }
     return(1);
 }