Exemple #1
0
        public bool GetIPInBeOperation(TMSKSocket socket, IPOperaType type)
        {
            if (type == IPOperaType.BanConnect)
            {
                this.processEvent(new IpEventBase(49, socket.AcceptIpAsInt, socket.UserID));
            }
            long ipAsInt = Global.GetIpAsIntSafe(socket);

            lock (IPStatisticsManager.dictOperaMothod)
            {
                IPOperaData oldData = null;
                if (!IPStatisticsManager.dictOperaMothod.TryGetValue(ipAsInt, out oldData))
                {
                    return(false);
                }
                if (oldData.recvTicks + (long)(oldData.OperaTime[(int)type] * 1000) > TimeUtil.NOW())
                {
                    if (type != IPOperaType.BanConnect)
                    {
                        string userID = socket.UserID;
                        if (!string.IsNullOrEmpty(userID))
                        {
                            if (this.CheckUserIdValue(userID, "ThisIPPass"))
                            {
                                return(false);
                            }
                        }
                    }
                    LogManager.WriteLog(LogTypes.IPStatistics, string.Format("Operation {0} ip={1}", type.ToString(), Global.GetIPAddress(socket)), null, true);
                    return(true);
                }
            }
            return(false);
        }
Exemple #2
0
        private IPOperaData checkIP(IPStatisticsData ipData, bool local)
        {
            IPOperaData operaData = null;

            foreach (StatisticsControl config in IPStatisticsPersistence.Instance._IPControlList)
            {
                if (config.Local == local && !this.checkIP(ipData, config))
                {
                    if (!IPStatisticsPersistence.Instance.isCanPassIP(ipData.ipAsInt))
                    {
                        if (null == operaData)
                        {
                            operaData = new IPOperaData();
                        }
                        operaData.ipAsInt = ipData.ipAsInt;
                        if (config.OperaType >= 0)
                        {
                            if (config.OperaParam > operaData.OperaTime[config.OperaType])
                            {
                                operaData.OperaTime[config.OperaType] = config.OperaParam;
                            }
                            if (ipData.IPInfoParams[config.ParamType] > operaData.OperaParam[config.OperaType])
                            {
                                operaData.OperaParam[config.OperaType] = ipData.IPInfoParams[config.ParamType];
                            }
                        }
                        string logmsg = string.Format("cant pass ip={0}:{1} ruleid={2} paramValue={3}", new object[]
                        {
                            operaData.ipAsInt,
                            IpHelper.IntToIp(operaData.ipAsInt),
                            config.ID,
                            ipData.IPInfoParams[config.ParamType]
                        });
                        if (config.ComParamType >= 0)
                        {
                            logmsg += string.Format(" comParamValue={0}", ipData.IPInfoParams[config.ComParamType]);
                        }
                        LogManager.WriteLog(LogTypes.IPStatistics, logmsg, null, true);
                    }
                }
            }
            return(operaData);
        }
Exemple #3
0
        public void RequestResult()
        {
            long        currTicks     = TimeUtil.NOW();
            List <long> needDelIPList = new List <long>();

            lock (IPStatisticsManager.dictOperaMothod)
            {
                foreach (KeyValuePair <long, IPOperaData> ipData in IPStatisticsManager.dictOperaMothod)
                {
                    bool needDel = true;
                    if (this.isCanPassIP(ipData.Key))
                    {
                        needDel = true;
                    }
                    else
                    {
                        for (int i = 0; i < 4; i++)
                        {
                            if (ipData.Value.recvTicks + (long)(ipData.Value.OperaTime[i] * 1000) > currTicks)
                            {
                                needDel = false;
                                break;
                            }
                        }
                    }
                    if (needDel)
                    {
                        needDelIPList.Add(ipData.Key);
                    }
                }
                foreach (long ip in needDelIPList)
                {
                    IPStatisticsManager.dictOperaMothod.Remove(ip);
                }
            }
            List <IPOperaData> resultList = IPStatisticsClient.getInstance().GetIPStatisticsResult();

            LogManager.WriteLog(LogTypes.IPStatistics, string.Format("request ip data minite={0} count={1}", IPStatisticsManager.lastMinite, (resultList == null) ? 0 : resultList.Count), null, true);
            if (resultList != null && resultList.Count > 0)
            {
                lock (IPStatisticsManager.dictOperaMothod)
                {
                    foreach (IPOperaData ipData2 in resultList)
                    {
                        if (!this.isCanPassIP(ipData2.ipAsInt))
                        {
                            IPOperaData oldData = null;
                            if (IPStatisticsManager.dictOperaMothod.TryGetValue(ipData2.ipAsInt, out oldData))
                            {
                                for (int i = 0; i < 4; i++)
                                {
                                    if (currTicks + (long)(ipData2.OperaTime[i] * 1000) > oldData.recvTicks + (long)(oldData.OperaTime[i] * 1000))
                                    {
                                        oldData.recvTicks    = currTicks;
                                        oldData.OperaTime[i] = ipData2.OperaTime[i];
                                    }
                                }
                            }
                            else
                            {
                                ipData2.recvTicks = currTicks;
                                IPStatisticsManager.dictOperaMothod.Add(ipData2.ipAsInt, ipData2);
                            }
                            LogManager.WriteLog(LogTypes.IPStatistics, string.Format("recv need ip minite={0} ip={1}:{2} ", IPStatisticsManager.lastMinite, ipData2.ipAsInt, IpHelper.IntToIp(ipData2.ipAsInt)), null, true);
                        }
                    }
                }
            }
        }
Exemple #4
0
        private void IPStatisticsProc()
        {
            Dictionary <int, List <IPStatisticsData> > lastData = new Dictionary <int, List <IPStatisticsData> >();

            lock (IPStatisticsService.dictCurrData)
            {
                foreach (KeyValuePair <int, List <IPStatisticsData> > item in IPStatisticsService.dictCurrData)
                {
                    lastData.Add(item.Key, item.Value);
                }
                IPStatisticsService.dictCurrData.Clear();
            }
            Dictionary <long, HashSet <int> >     ip2serveridDict = new Dictionary <long, HashSet <int> >();
            Dictionary <long, IPStatisticsData>   totalDataDict   = new Dictionary <long, IPStatisticsData>();
            Dictionary <int, List <IPOperaData> > IPOperaDataDict = new Dictionary <int, List <IPOperaData> >();

            foreach (KeyValuePair <int, List <IPStatisticsData> > ipDataList in lastData)
            {
                foreach (IPStatisticsData ipData in ipDataList.Value)
                {
                    try
                    {
                        IPOperaData operaData = this.checkIP(ipData, true);
                        if (null != operaData)
                        {
                            List <IPOperaData> opList;
                            if (!IPOperaDataDict.TryGetValue(ipDataList.Key, out opList))
                            {
                                opList = new List <IPOperaData>();
                                IPOperaDataDict[ipDataList.Key] = opList;
                            }
                            opList.Add(operaData);
                        }
                        if (ip2serveridDict.ContainsKey(ipData.ipAsInt))
                        {
                            ip2serveridDict[ipData.ipAsInt].Add(ipDataList.Key);
                        }
                        else
                        {
                            HashSet <int> hashServerID = new HashSet <int>();
                            hashServerID.Add(ipDataList.Key);
                            ip2serveridDict.Add(ipData.ipAsInt, hashServerID);
                        }
                    }
                    catch (Exception ex)
                    {
                        LogManager.WriteLog(LogTypes.Error, "IPStatisticsProc", ex, false);
                    }
                    IPStatisticsData tmpIPData = null;
                    if (totalDataDict.TryGetValue(ipData.ipAsInt, out tmpIPData))
                    {
                        tmpIPData += ipData;
                    }
                    else
                    {
                        totalDataDict.Add(ipData.ipAsInt, ipData);
                    }
                }
            }
            List <IPOperaData> resultList = new List <IPOperaData>();

            foreach (KeyValuePair <long, IPStatisticsData> ipData2 in totalDataDict)
            {
                IPOperaData operaData = this.checkIP(ipData2.Value, false);
                if (null != operaData)
                {
                    resultList.Add(operaData);
                }
            }
            this.AddOpList(IPOperaDataDict, resultList, ip2serveridDict);
            lock (IPStatisticsService.dictIPOperaData)
            {
                IPStatisticsService.dictIPOperaData = IPOperaDataDict;
            }
        }