public async Task <int> ReceiveAsync(ArraySegment <byte> receiveBuffer, CancellationToken cancellationToken) { try { var receivedBytes = await _transportLayer.ReceiveAsync(receiveBuffer, cancellationToken).ConfigureAwait(false); _logger.Trace(nameof(CoapTransportLayerAdapter), $"Received {receivedBytes} bytes..."); return(receivedBytes); } catch (Exception exception) { throw new CoapCommunicationException("Error receiving CoAP messages.", exception); } }
public async Task <CoapResponse> Request(CoapRequest request, CancellationToken cancellationToken) { if (request is null) { throw new ArgumentNullException(nameof(request)); } var requestMessage = _requestToMessageConverter.Convert(request); requestMessage.Id = _messageIdProvider.Next(); var requestMessageBuffer = _messageEncoder.Encode(requestMessage); await _transportLayer.SendAsync(requestMessageBuffer, cancellationToken).ConfigureAwait(false); // TODO: Add proper reqest-response matching like in MQTTnet. await _transportLayer.ReceiveAsync(_receiveBuffer, cancellationToken).ConfigureAwait(false); var responseMessage = _messageDecoder.Decode(_receiveBuffer); return(_messageToResponseConverter.Convert(responseMessage)); }