Exemplo n.º 1
0
 public UserToken(int asyncReceiveBufferSize, int initBufferSize = 1024 *4)
 {
     _connectSocket              = null;
     _protocol                   = null;
     _receiveEventArgs           = new SocketAsyncEventArgs();
     _receiveEventArgs.UserToken = this;
     _asyncReceiveBuffer         = new byte[asyncReceiveBufferSize];
     _receiveEventArgs.SetBuffer(_asyncReceiveBuffer, 0, _asyncReceiveBuffer.Length);
     _sendEventArgs           = new SocketAsyncEventArgs();
     _sendEventArgs.UserToken = this;
     _receiveBuffer           = new DynamicBufferManager(initBufferSize);
     _sendBuffer = new SendBufferManager(initBufferSize);;
 }
Exemplo n.º 2
0
        internal bool OnSendCompleted()
        {
            _activeTime = DateTime.UtcNow;
            _sendAsync  = false;
            SendBufferManager asyncSendBufferManager = _token.SendBuffer;

            //清除已发送的包
            asyncSendBufferManager.ClearFirstPacket();
            int offset = 0;
            int count  = 0;

            if (asyncSendBufferManager.GetFirstPacket(ref offset, ref count))
            {
                _sendAsync = true;
                return(_socketServer.SendAsyncEventArgs(_token.ConnectSocket, _token.SendEventArgs,
                                                        asyncSendBufferManager.BufferManager.Buffer, offset, count));
            }
            else
            {
                return(OnSendCallback());
            }
        }
Exemplo n.º 3
0
        public bool Send(byte[] buffer, int offset, int count)
        {
            SendBufferManager asyncSendBufferManager = _token.SendBuffer;

            asyncSendBufferManager.StartPacket();
            OnSend(asyncSendBufferManager.BufferManager, buffer, offset, count);
            asyncSendBufferManager.EndPacket();

            bool result = true;

            if (!_sendAsync)
            {
                int packetOffset = 0;
                int packetCount  = 0;
                if (asyncSendBufferManager.GetFirstPacket(ref packetOffset, ref packetCount))
                {
                    _sendAsync = true;
                    result     = _socketServer.SendAsyncEventArgs(_token.ConnectSocket, _token.SendEventArgs,
                                                                  asyncSendBufferManager.BufferManager.Buffer, packetOffset, packetCount);
                }
            }
            return(result);
        }