public void Close()
 {
     if (_sock != null)
     {
         _sock.Disconnect();
     }
 }
        private static void RecycleProc()
        {
            while (true)
            {
                try {
                    Thread.Sleep(1000);

                    List <RpcTcpSimplexConnectionWrapper> keys = new List <RpcTcpSimplexConnectionWrapper>();
                    lock (_syncRoot) {
                        foreach (var k in _connections)
                        {
                            keys.Add(k.Key);
                        }
                    }

                    //
                    // 尝试回收一个连接
                    foreach (var k in keys)
                    {
                        k.TryRecycle();
                    }

                    //
                    // 关闭延时Queue中的Socket
                    while (_closeQueue.Count > 0)
                    {
                        ComboClass <DateTime, RpcTcpSocketConnection> a;
                        lock (_syncRoot) {
                            a = _closeQueue.Peek();
                            if (DateTime.Now > a.V1)
                            {
                                a = _closeQueue.Dequeue();
                            }
                            else
                            {
                                break;
                            }
                        }
                        try {
                            RpcTcpSocketConnection sock = a.V2;
                            _tracing.InfoFmt("delay close connection: {0}", sock.RemoteUri);
                            sock.Disconnect();
                            _tracing.InfoFmt("delay close connection ok {0}", sock.RemoteUri);
                        } catch (Exception ex) {
                            _tracing.Error(ex, "delay close connection failed");
                        }
                    }
                } catch (ThreadAbortException) {
                    Thread.ResetAbort();
                } catch (Exception ex) {
                    _tracing.Error(ex, "RecycleProc Failed");
                }
            }
        }
Ejemplo n.º 3
0
 public override void Disconnect()
 {
     _sock.Disconnect();
 }