コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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));
        }