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; }
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); } }