Example #1
0
        private async Task <TResult> DoWithConnectedTcpClientAsync <TResult>(
            Func <Stream, Task <TResult> > doWithNetworkStream)
        {
            TcpClientHolder tcpClientHolder = null;

            try
            {
                tcpClientHolder = await _connectionsPool.Acquire();

                return(await doWithNetworkStream(tcpClientHolder.NetworkStream));
            }
            catch (SocketException socketException)
            {
                _logger.LogError(socketException);
                throw new CoreRpcCommunicationException(
                          $"Error dispatching a call to the server: {socketException.Message}");
            }
            finally
            {
                if (tcpClientHolder != null)
                {
                    _connectionsPool.Release(tcpClientHolder);
                }
            }
        }
Example #2
0
        private async Task CloseTcpClient(TcpClientHolder tcpClientHolder)
        {
            if (tcpClientHolder.TcpClient.Connected)
            {
                await ExceptionsHandlingHelper.ExecuteWithExceptionLogging(
                    () => SendDataAsync(
                        tcpClientHolder.NetworkStream,
                        NetworkConstants.EndOfSessionMessageBytes),
                    async() =>
                {
                    // ReSharper disable once AccessToDisposedClosure - synchronous code
                    tcpClientHolder.TcpClient.Close();
                    await tcpClientHolder.NetworkStream.DisposeAsync();
                },
                    _logger);
            }

            tcpClientHolder.TcpClient.Dispose();
        }