Exemple #1
0
 protected override void DoWork()
 {
     while (NetworkStream != null && NetworkStream.CanWrite && _queue.TryDequeue(out byte[] data))
     {
         try
         {
             NetworkStream?.Write(data, 0, data.Length);
         }
         catch (IOException ex)
         {
             var eventArgs = new FaultExceptionEventArgs(ex);
             SenderNetworkFault?.Invoke(this, eventArgs);
         }
     }
 }
Exemple #2
0
        protected override void DoWork()
        {
            if (!NetworkStream.CanRead)
            {
                return;
            }
            int length = 0;

            try
            {
                Array.Clear(_data, 0, _data.Length);

                // Receive header first - 4 bytes indicating total packet length
                length = ReceiveHeader();

                // Receive actual packet
                ReceivePayload(length);

                // Invoke event
                var eventArgs = new PacketReceivedEventArgs(_data, length);
                PacketReceived?.Invoke(this, eventArgs);
            }
            catch (ArgumentOutOfRangeException)
            {
                Logger.LogWarning("Received message, length bytes error (invalid protocol), len: " + length);
            }
            catch (IOException ex) when(ex.InnerException is SocketException innerEx && innerEx.SocketErrorCode == SocketError.TimedOut)
            {
                // Receive timeout
                // Swallow
            }
            catch (IOException ex)
            {
                // Critical fault - probably need to restart connection
                var eventArgs = new FaultExceptionEventArgs(ex);
                ReceiverNetworkFault?.Invoke(this, eventArgs);
            }
        }
Exemple #3
0
 protected virtual void InvokeNetworkFaultedEvent(object sender, FaultExceptionEventArgs args)
 => NetworkWorkerFaulted?.Invoke(sender, args);
Exemple #4
0
 private void _senderWorker_SenderNetworkFault(object sender, FaultExceptionEventArgs args)
 => InvokeNetworkFaultedEvent(sender, args);