private void InitSocketAsyncPool() { int netReceiveBufferSize = ServerConfig.NetReceiveBufferSize; if (netReceiveBufferSize <= 0) { netReceiveBufferSize = 1024; } _BufferManager = new BufferManager(netReceiveBufferSize * ServerConfig.MaxConnects, netReceiveBufferSize); try { _BufferManager.InitBuffer(); } catch (Exception ex) { Logger.Error(true, "", ex); throw; } _SocketAsyncPool = new SocketAsyncEventArgsProxyPool(); SocketAsyncEventArgsEx socketEventArg; for (int i = 0; i < ServerConfig.MaxConnects; i++) { socketEventArg = new SocketAsyncEventArgsEx(); _BufferManager.SetBuffer(socketEventArg); socketEventArg.Initialize();//初始化缓存接口 _SocketAsyncPool.Push(new SocketAsyncEventArgsProxy(socketEventArg)); } }
/// <summary> /// 构造函数 udp /// <para>正式调用还需执行Init()</para> /// </summary> internal RemoteConnection(EndPoint remoteEndPoint, ServerSocket service) { isAlive = true; socketSvrMgr = service; socket = Socket.FillAsClient(remoteEndPoint); sendEventArgs = new SocketAsyncEventArgsEx(this, remoteEndPoint, null); }
/// <summary> /// 构造函数 /// </summary> /// <param name="esfSocket">ESFSocket对象</param> /// <param name="numMaxBufferSize">接受数据最大容量</param> public BaseClientSocket(Socket esfSocket, int numMaxBufferSize) { clientSocket = esfSocket; this.numMaxBufferSize = numMaxBufferSize + SweetStream.OUTSOURCING_SIZE; RBuffer = new SweetStream(); sendEventArgs = new SocketAsyncEventArgsEx(clientSocket, clientSocket.endPoint, IO_Completed); readWriteEventArg = new SocketAsyncEventArgs() { UserToken = clientSocket, RemoteEndPoint = clientSocket.endPoint }; readWriteEventArg.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed); }
/// <summary> /// 初始化 /// </summary> internal void Init(Socket socket, EventHandler <System.Net.Sockets.SocketAsyncEventArgs> eventHandler) { receiveEventArgs = new System.Net.Sockets.SocketAsyncEventArgs(); receiveEventArgs.UserToken = this; connectDateTime = DateTime.Now; rBuffer = new SweetStream(); isAlive = true; timeoutCount = 0; this.socket = socket; if (this.socket != null) { sendEventArgs = new SocketAsyncEventArgsEx(this, socket, eventHandler); receiveEventArgs.AcceptSocket = this.socket.GetSocket(); receiveEventArgs.RemoteEndPoint = this.socket.endPoint; } }