示例#1
0
 private Task <bool> DetectAndReceive(Memory <byte> payload)
 {
     if (SiemensPlcProtocolContext.TryDetectDatagramType(payload, out var s7DatagramType))
     {
         return(S7DatagramReceived(s7DatagramType, payload));
     }
     return(Task.FromResult(false));
 }
示例#2
0
 private Task <bool> DetectAndReceive(Memory <byte> payload)
 {
     if (_s7Context.TryDetectDatagramType(payload, out var s7DatagramType))
     {
         S7DatagramReceived(s7DatagramType, payload);
         return(Task.FromResult(true));
     }
     return(Task.FromResult(false));
 }
示例#3
0
        private async Task <int> Rfc1006DatagramReceived(Type datagramType, Memory <byte> buffer)
        {
            var processed = 0;

            if (datagramType == typeof(ConnectionConfirmedDatagram))
            {
                var res = ConnectionConfirmedDatagram.TranslateFromMemory(buffer, out processed);
                await ReceivedConnectionConfirmed();
            }
            else if (datagramType == typeof(DataTransferDatagram))
            {
                var datagram = DataTransferDatagram.TranslateFromMemory(buffer.Slice(processed), _context, out var needMoreData, out processed);
                if (!needMoreData && _s7Context.TryDetectDatagramType(datagram.Payload, out var s7DatagramType))
                {
                    await SiemensPlcDatagramReceived(s7DatagramType, datagram.Payload);
                }
            }

            return(processed);
        }