Example #1
0
        public async Task <bool> SendDataToSocket(object data)
        {
            if (Disconnected)
            {
                return(false);
            }

            try
            {
                var dataToSocket = _tcpSerializer.Serialize(data);
                var stream       = _socket.GetStream();
                await stream.WriteAsync(dataToSocket, 0, dataToSocket.Length);

                _socketStatistic.Sent        += dataToSocket.Length;
                _socketStatistic.LastSendTime = DateTime.UtcNow;
                await stream.FlushAsync();

                return(true);
            }
            catch (Exception ex)
            {
                await Disconnect();

                _log.Add("SendDataToSocket Error. Id: " + Id + "; Msg: " + ex.Message);
                return(false);
            }
        }
Example #2
0
        public void SendDataToSocket(TSocketData data)
        {
            if (!Connected)
            {
                return;
            }

            var dataToSend = TcpSerializer.Serialize(data);

            _deliveryPublisherSubscriber.Publish(dataToSend);
        }
Example #3
0
        public async Task <bool> SendDataToSocket(object data, CancellationToken cancellationToken)
        {
            if (Disconnected)
            {
                return(false);
            }

            try
            {
                var dataToSocket = _tcpSerializer.Serialize(data);
                var stream       = _socket.GetStream();
                try
                {
                    await _streamWriteLock.WaitAsync(cancellationToken);

                    await stream.WriteAsync(dataToSocket, 0, dataToSocket.Length, cancellationToken); // Concurrent write is not supported

                    await stream.FlushAsync(cancellationToken);

                    _socketStatistic.Sent        += dataToSocket.Length;
                    _socketStatistic.LastSendTime = DateTime.UtcNow;
                }
                finally
                {
                    _streamWriteLock.Release();
                }

                return(true);
            }
            catch (OperationCanceledException)
            {
                return(false);
            }
            catch (Exception ex)
            {
                await Disconnect(ex);

                _log?.Error(ex, context: new { connectionId = Id });
                _legacyLog?.Add("SendDataToSocket Error. Id: " + Id + "; Msg: " + ex.Message);

                TelemetryHelper.SubmitException(ex);
                return(false);
            }
        }