예제 #1
0
                public RecieveToken([NotNull] Socket socket, [NotNull] TOuterToken outerToken,
                                    [NotNull] IList <ArraySegment <byte> > buffer, int expectedBytesCount,
                                    [NotNull] RecieverCallback callback)
                {
                    if (socket == null)
                    {
                        throw new ArgumentNullException("socket");
                    }
                    if (outerToken == null)
                    {
                        throw new ArgumentNullException("outerToken");
                    }
                    if (buffer == null)
                    {
                        throw new ArgumentNullException("buffer");
                    }
                    if (expectedBytesCount <= 0)
                    {
                        throw new ArgumentOutOfRangeException("expectedBytesCount", "must be positive");
                    }
                    if (callback == null)
                    {
                        throw new ArgumentNullException("callback");
                    }

                    OuterToken         = outerToken;
                    ExpectedBytesCount = expectedBytesCount;
                    Buffer             = buffer;
                    Socket             = socket;
                    Callback           = callback;
                }
예제 #2
0
            public void RecieveAsync([NotNull] Socket socket, int expectedMessageSize, [NotNull] TOuterToken outerToken, [NotNull] RecieverCallback callback)
            {
                if (socket == null)
                {
                    throw new ArgumentNullException("socket");
                }
                if (expectedMessageSize <= 0)
                {
                    throw new ArgumentOutOfRangeException("expectedMessageSize", "must be positive");
                }
                if (outerToken == null)
                {
                    throw new ArgumentNullException("outerToken");
                }
                if (callback == null)
                {
                    throw new ArgumentNullException("callback");
                }

                var buffer     = _bufferManager.CheckOut(expectedMessageSize);
                var socketArgs = _socketArgsPool.Get();

                var token = new RecieveToken(socket, outerToken, buffer, expectedMessageSize, callback);

                socketArgs.BufferList = buffer;
                socketArgs.Completed += RecieveCompletedHandler;
                socketArgs.UserToken  = token;

                try
                {
                    bool willRaiseEvent = socket.ReceiveAsync(socketArgs);
                    if (!willRaiseEvent)
                    {
                        RecieveCompletedHandler(this, socketArgs);
                    }
                }
                catch (SocketException socketException)
                {
                    Debug.Assert(socketException.SocketErrorCode != SocketError.Success);
                    ReleaseResourcesAndCallErrorCallback(socketArgs, token, socketException.SocketErrorCode);
                }
            }