public async Task <CoapResponse> RequestAsync(CoapRequest request, CancellationToken cancellationToken) { if (request is null) { throw new ArgumentNullException(nameof(request)); } var requestMessage = _requestToMessageConverter.Convert(request); var responseMessage = await RequestAsync(requestMessage, cancellationToken).ConfigureAwait(false); var payload = responseMessage.Payload; if (CoapClientBlockTransferReceiver.IsBlockTransfer(responseMessage)) { payload = await new CoapClientBlockTransferReceiver(requestMessage, responseMessage, this, _logger).ReceiveFullPayload(cancellationToken).ConfigureAwait(false); } return(_messageToResponseConverter.Convert(responseMessage, payload)); }
public async Task <CoapObserveResponse> ObserveAsync(CoapObserveOptions options, CancellationToken cancellationToken) { if (options is null) { throw new ArgumentNullException(nameof(options)); } var request = new CoapRequest { Method = CoapRequestMethod.Get, Options = options.Request.Options, }; var token = _messageTokenProvider.Next(); var requestMessage = _requestToMessageConverter.Convert(request); requestMessage.Token = token.Value; requestMessage.Options.Add(new CoapMessageOptionFactory().CreateObserve(CoapObserveOptionValue.Register)); var responseMessage = await RequestAsync(requestMessage, cancellationToken).ConfigureAwait(false); var payload = responseMessage.Payload; if (CoapClientBlockTransferReceiver.IsBlockTransfer(responseMessage)) { payload = await new CoapClientBlockTransferReceiver(requestMessage, responseMessage, this, _logger).ReceiveFullPayload(cancellationToken).ConfigureAwait(false); } _observedResponseHandlers[token] = options.ResponseHandler; var response = _messageToResponseConverter.Convert(responseMessage, payload); return(new CoapObserveResponse(response, this) { Token = token, Request = request }); }