/// <summary> /// /// </summary> /// <param name="id">唯一ID</param> /// <param name="receiveBuffer">接收缓冲区</param> /// <param name="sendBuffer">发送缓冲区</param> /// <param name="socket">连接的Socket</param> /// <param name="process"></param> public UserSession(int id, BytesSegment receiveBuffer, BytesSegment sendBuffer, Socket socket, IBufferProcessor process) : base(id, receiveBuffer, sendBuffer, process) { m_socket = socket; m_address = ((System.Net.IPEndPoint)(socket.RemoteEndPoint)).Address; Created = DateTime.UtcNow; }
public SocketToken(int id, Sinan.Collections.BytesSegment receiveBuffer, Sinan.Collections.BytesSegment sendBuffer, IBufferProcessor processor, Collections.CircularQueue<Collections.BytesSegment> sendPool = null) { m_connectID = id; m_sendPool = sendPool ?? new Collections.CircularQueue<Collections.BytesSegment>(64); m_processor = processor; SocketAsyncEventArgs receiver = new SocketAsyncEventArgs(); receiver.Completed += new EventHandler<SocketAsyncEventArgs>(ReceiveCompleted); receiver.SetBuffer(receiveBuffer.Array, receiveBuffer.Offset, receiveBuffer.Count); SocketAsyncEventArgs sender = new SocketAsyncEventArgs(); sender.Completed += new EventHandler<SocketAsyncEventArgs>(SendCompleted); sender.SetBuffer(sendBuffer.Array, sendBuffer.Offset, sendBuffer.Count); m_receiver = receiver; m_receiveOffset = receiver.Offset; m_receiveMax = receiver.Count; m_sender = sender; m_sendOffset = sender.Offset; m_sendMax = sender.Count; }
/// <summary> /// /// </summary> /// <param name="id">唯一ID</param> /// <param name="receiveBuffer">接收缓冲区</param> /// <param name="sendBuffer">发送缓冲区</param> /// <param name="socket">连接的Socket</param> /// <param name="process"></param> public UserSession(int id, UserBuffer buffer, Socket socket, IBufferProcessor process) : base(id, buffer.ReceiveBuffer, buffer.SendBuffer, process, buffer.SendPool) { m_socket = socket; Buffer = buffer; m_address = ((System.Net.IPEndPoint)(socket.RemoteEndPoint)).Address; Created = DateTime.UtcNow; }
/// <summary> /// /// </summary> /// <param name="id">唯一ID</param> /// <param name="receiveBuffer">接收缓冲区</param> /// <param name="sendBuffer">发送缓冲区</param> /// <param name="socket">连接的Socket</param> /// <param name="process"></param> public GMToken(int id, Sinan.Collections.BytesSegment receiveBuffer, Sinan.Collections.BytesSegment sendBuffer, Socket socket, IBufferProcessor process) : base(id, receiveBuffer, sendBuffer, process, null) { m_socket = socket; m_address = ((System.Net.IPEndPoint)(socket.RemoteEndPoint)).Address; Created = DateTime.UtcNow; }
/// <summary> /// 构造函数 /// </summary> /// <param name="maxClients">允许的最大连接数</param> /// <param name="receiveBufferSize">每个连接接收数据缓存的大小</param> /// <param name="sendBufferSize">每个连发送收数据缓存的大小</param> /// <param name="sendQueueSize">等待发送数据的最大业务包</param> public SessionFactory(int maxClients, int receiveBufferSize, int sendBufferSize, int sendQueueSize, IBufferProcessor commandReader) { m_receiveBufferSize = receiveBufferSize; m_sendBufferSize = sendBufferSize; m_bufferPool = new System.Collections.Concurrent.ConcurrentQueue<UserBuffer>(); m_receivebuffer = new byte[maxClients * receiveBufferSize]; m_sendbuffer = new byte[maxClients * sendBufferSize]; m_process = commandReader; for (int i = 0; i < maxClients; i++) { var receivebuffer = new Sinan.Collections.BytesSegment(m_receivebuffer, m_receiveBufferSize * i, m_receiveBufferSize); var sendbuffer = new Sinan.Collections.BytesSegment(m_sendbuffer, m_sendBufferSize * i, m_sendBufferSize); UserBuffer helper = new UserBuffer(i, this, receivebuffer, sendbuffer, sendQueueSize); m_bufferPool.Enqueue(helper); } }
/// <summary> /// 构造函数 /// </summary> /// <param name="receiveBufferSize">每个连接接收数据缓存的大小</param> /// <param name="sendBufferSize">每个连发送收数据缓存的大小</param> /// <param name="maxWaitSend">等待发送数据的最大业务包</param> public SessionFactory(int receiveBufferSize, int sendBufferSize, int maxWaitSend, IBufferProcessor commandReader) { m_receiveBufferSize = receiveBufferSize; m_sendBufferSize = sendBufferSize; m_process = commandReader; }