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;//记录使用 } }
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)); } } } }