Пример #1
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);
            }
        }
Пример #2
0
 private void _receiverWorker_PacketReceived(object sender, PacketReceivedEventArgs args)
 => PacketReceived?.Invoke(sender, args);