Example #1
0
        private void AddPackage(HostAndPort host, BasePackage package)
        {
            HostReceive receive;

            if (hostQueue.TryGetValue(host.Host + host.Port, out receive))
            {
                if (receive.IsShut)
                {
                    hostQueue.TryRemove(host.Host + host.Port, out receive);
                    AddPackage(host, package);
                    return;
                }
                receive.Add(package);
                receive.LastUseTime = receive.CountTime;
            }
            else
            {
                receive = new HostReceive(senderSession)
                {
                    Host = host
                };
                receive.dataNotify += ReceiveData;
                receive.Add(package);
                hostQueue[host.Host + host.Port] = receive;
                receive.LastUseTime = receive.CountTime;//记录使用
            }
        }
Example #2
0
 private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 {
     //监测数据
     foreach (var kv in hostQueue)
     {
         kv.Value.CountTime++;//在这里计时
         if (kv.Value.CountTime > kv.Value.LastUseTime + CacheHostTime)
         {
             //该端点已经超时没有使用了
             HostReceive hostReceive = null;
             if (hostQueue.TryRemove(kv.Key, out hostReceive))
             {
                 hostReceive.Stop();
                 hostReceive.dataNotify -= this.ReceiveData;
                 Console.WriteLine(string.Format("{0}空闲移除", hostReceive.Host));
             }
         }
     }
 }