Esempio n. 1
0
 /// <summary>
 /// Initializes a SocketStream with a SaeaSocketWrapper object.
 /// </summary>
 /// <param name="socket">a SaeaSocketWrapper object</param>
 public SocketStream(SaeaSocketWrapper socket)
 {
     if (socket == null)
     {
         throw new ArgumentNullException("socket");
     }
     streamSocket = socket;
     bufPool      = ByteBufPool.Default;
 }
Esempio n. 2
0
 /// <summary>
 /// Initializes a SocketStream with a SaeaSocketWrapper object.
 /// </summary>
 /// <param name="socket">a SaeaSocketWrapper object</param>
 public SocketStream(SaeaSocketWrapper socket)
 {
     if (socket == null)
     {
         throw new ArgumentNullException("socket");
     }
     streamSocket = socket;
     bufPool = ByteBufPool.Default;
 }
Esempio n. 3
0
        /// <summary>
        /// Accepts a incoming connection request.
        /// </summary>
        /// <returns>A ISocket instance used to send and receive data</returns>
        public ISocketWrapper Accept()
        {
            var socket     = innerSocket.Accept();
            var clientSock = new SaeaSocketWrapper(this, socket);

            logger.LogDebug("Accepted connection from {0} to {1}", clientSock.RemoteEndPoint, clientSock.LocalEndPoint);
            DoReceive(clientSock);
            return(clientSock);
        }
Esempio n. 4
0
        /// <summary>
        /// Post a receive operation
        /// </summary>
        private void DoReceive(SaeaSocketWrapper clientSocket)
        {
            // Prepares the SocketAsyncEventArgs for receive operation.
            SocketAsyncEventArgs recvEventArg;

            if (!poolOfRecvSendEvents.TryDequeue(out recvEventArg))
            {
                recvEventArg            = new SocketAsyncEventArgs();
                recvEventArg.Completed += IoCompleted;
            }

            // Allocate buffer for the receive operation.
            var dataBuf = ByteBufPool.Default.Allocate();

            recvEventArg.UserToken = new SockDataToken(clientSocket, dataBuf);
            recvEventArg.SetBuffer(dataBuf.Array, dataBuf.WriterIndexOffset, dataBuf.WritableBytes);

            // Post async receive operation on the socket
            var socket = clientSocket.innerSocket;

            recvEventArg.AcceptSocket = socket;
            if (clientSocket.isCleanedUp || socket == null)
            {
                // do nothing if client socket already disposed.
                dataBuf.Status = (int)SocketError.NetworkDown;
                dataBuf.Release();
                recvEventArg.UserToken = null;
                clientSocket.receivedDataQueue.Add(dataBuf);
                return;
            }

            var willRaiseEvent = socket.ReceiveAsync(recvEventArg);

            if (!willRaiseEvent)
            {
                // The operation completed synchronously, we need to call ProcessReceive method directly
                ProcessReceive(recvEventArg);
            }
        }
Esempio n. 5
0
 /// <summary>
 /// Initializes a SaeaSocketWrapper instance for an accepted socket.
 /// </summary>
 private SaeaSocketWrapper(SaeaSocketWrapper parent, Socket acceptedSocket)
 {
     this.parent = parent;
     innerSocket = acceptedSocket;
     isConnected = true;
 }
Esempio n. 6
0
        /// <summary>
        /// Post a receive operation
        /// </summary>
        private void DoReceive(SaeaSocketWrapper clientSocket)
        {
            // Prepares the SocketAsyncEventArgs for receive operation.
            SocketAsyncEventArgs recvEventArg;
            if (!poolOfRecvSendEvents.TryDequeue(out recvEventArg))
            {
                recvEventArg = new SocketAsyncEventArgs();
                recvEventArg.Completed += IoCompleted;
            }

            // Allocate buffer for the receive operation.
            var dataBuf = ByteBufPool.Default.Allocate();
            recvEventArg.UserToken = new SockDataToken(clientSocket, dataBuf);
            recvEventArg.SetBuffer(dataBuf.Array, dataBuf.WriterIndexOffset, dataBuf.WritableBytes);

            // Post async receive operation on the socket
            var socket = clientSocket.innerSocket;
            recvEventArg.AcceptSocket = socket;
            if (clientSocket.isCleanedUp || socket == null)
            {
                // do nothing if client socket already disposed.
                dataBuf.Status = (int) SocketError.NetworkDown;
                dataBuf.Release();
                recvEventArg.UserToken = null;
                clientSocket.receivedDataQueue.Add(dataBuf);
                return;
            }

            var willRaiseEvent = socket.ReceiveAsync(recvEventArg);
            if (!willRaiseEvent)
            {
                // The operation completed synchronously, we need to call ProcessReceive method directly
                ProcessReceive(recvEventArg);
            }
        }
Esempio n. 7
0
 /// <summary>
 /// Accepts a incoming connection request.
 /// </summary>
 /// <returns>A ISocket instance used to send and receive data</returns>
 public ISocketWrapper Accept()
 {
     var socket = innerSocket.Accept();
     var clientSock = new SaeaSocketWrapper(this, socket);
     logger.LogDebug("Accepted connection from {0} to {1}", clientSock.RemoteEndPoint, clientSock.LocalEndPoint);
     DoReceive(clientSock);
     return clientSock;
 }
Esempio n. 8
0
 /// <summary>
 /// Initializes a SaeaSocketWrapper instance for an accepted socket.
 /// </summary>
 private SaeaSocketWrapper(SaeaSocketWrapper parent, Socket acceptedSocket)
 {
     this.parent = parent;
     innerSocket = acceptedSocket;
     isConnected = true;
 }