private Task <bool> DetectAndReceive(Memory <byte> payload) { if (SiemensPlcProtocolContext.TryDetectDatagramType(payload, out var s7DatagramType)) { return(S7DatagramReceived(s7DatagramType, payload)); } return(Task.FromResult(false)); }
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)); }
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); }