예제 #1
0
 public void Close()
 {
     if (_session.State != TcpSocketConnectionState.Closed)
     {
         _session.Close();
     }
 }
예제 #2
0
        private void AddTcpSocketSession(Socket client)
        {
            if (client == null)
            {
                return;
            }

            lock (ChannelManager.SyncLock)
            {
                ISocketAsyncEventArgsProxy socketProxy = this._SocketAsyncPool.Pop();
                if (socketProxy == null)
                {
                    AsyncUtil.AsyncRun(client.SafeClose);
                    Logger.Info(false, "已经到达最大连接数");
                    return;
                }

                ISocketSession socketSession = new TcpSocketSession(client, (IPEndPoint)client.RemoteEndPoint, socketProxy);
                socketSession.Setup(this);
                socketSession.Initialize();

                if (ChannelManager.AddChannel(socketSession.SessionID, socketSession))
                {
                    socketSession.CloseSocket += socketChannel_CloseSocket;
                    if (ServerConfig.ControlMode == ControlMode.Self ||
                        ServerConfig.ControlMode == ControlMode.Parallel ||
                        ServerConfig.ControlMode == ControlMode.Singleton)
                    {
                        socketSession.SocketReceiveData += socketChannel_SocketReceiveData;
                        AsyncUtil.AsyncRun(socketSession.TryReceive);
                    }

                    OnSocketConnected(socketSession.RemoteIP, socketSession.RemotePort);

                    OnChannelChanged(socketSession.RemoteIP, CommunicateType.NET, ChannelState.Open);

                    Logger.Info(false, String.Format("增加远程连接>>{0}:{1} 成功", socketSession.RemoteIP, socketSession.RemotePort));
                }
                else
                {
                    ISocketAsyncEventArgsProxy proxy = socketSession.SocketAsyncProxy;
                    proxy.Reset();
                    if (proxy.SocketReceiveEventArgsEx.InitOffset != proxy.SocketReceiveEventArgsEx.Offset)
                    {
                        proxy.SocketReceiveEventArgsEx.SetBuffer(proxy.SocketReceiveEventArgsEx.InitOffset, ServerConfig.NetReceiveBufferSize);
                    }
                    _SocketAsyncPool.Push(proxy);
                    socketSession.Close();
                    socketSession = null;
                    Logger.Info(true, String.Format("增加远程连接>>{0}:{1} 失败", socketSession.RemoteIP, socketSession.RemotePort));
                }
            }
        }
예제 #3
0
 public void Close()
 {
     _session.Close();
 }