public async Task PublishAsync(string resourceUriString, string contentType, byte[] payload, bool confirmable, Action <CodeType, string, byte[]> action) { if (!channel.IsConnected) { await ConnectAsync(); } session.UpdateKeepAliveTimestamp(); byte[] token = CoapToken.Create().TokenBytes; ushort id = session.CoapSender.NewId(token, null, action); string scheme = channel.IsEncrypted ? "coaps" : "coap"; string coapUriString = GetCoapUriString(scheme, resourceUriString); RequestMessageType mtype = confirmable ? RequestMessageType.Confirmable : RequestMessageType.NonConfirmable; CoapRequest cr = new CoapRequest(id, mtype, MethodType.POST, token, new Uri(coapUriString), MediaTypeConverter.ConvertToMediaType(contentType), payload); queue.Enqueue(cr.Encode()); while (queue.Count > 0) { byte[] message = queue.Dequeue(); Task t = channel.SendAsync(message); await Task.WhenAll(t); } }
public Task PublishAsync(string resourceUriString, string contentType, byte[] payload, NoResponseType nrt) { if (!channel.IsConnected) { Open(); Receive(); } session.UpdateKeepAliveTimestamp(); byte[] token = CoapToken.Create().TokenBytes; ushort id = session.CoapSender.NewId(token); string scheme = channel.IsEncrypted ? "coaps" : "coap"; string coapUriString = GetCoapUriString(scheme, resourceUriString); CoapRequest cr = new CoapRequest(id, RequestMessageType.NonConfirmable, MethodType.POST, new Uri(coapUriString), MediaTypeConverter.ConvertToMediaType(contentType), payload) { NoResponse = nrt }; return(channel.SendAsync(cr.Encode())); }
public static byte[] ConvertToCoap(CoapSession session, EventMessage message, byte[] observableToken = null) { CoapMessage coapMessage = null; CoapToken token = CoapToken.Create(); ushort id = observableToken == null?session.CoapSender.NewId(token.TokenBytes) : session.CoapSender.NewId(observableToken); string uriString = CoapUri.Create(session.Config.Authority, message.ResourceUri, IsEncryptedChannel); if (message.Protocol == ProtocolType.MQTT) { MqttMessage msg = MqttMessage.DecodeMessage(message.Message); PublishMessage pub = msg as PublishMessage; MqttUri uri = new MqttUri(pub.Topic); if (observableToken == null) { RequestMessageType messageType = msg.QualityOfService == QualityOfServiceLevelType.AtMostOnce ? RequestMessageType.NonConfirmable : RequestMessageType.Confirmable; //request coapMessage = new CoapRequest(id, messageType, MethodType.POST, new Uri(uriString), MediaTypeConverter.ConvertToMediaType(message.ContentType)); } else { //response coapMessage = new CoapResponse(id, ResponseMessageType.NonConfirmable, ResponseCodeType.Content, observableToken, MediaTypeConverter.ConvertToMediaType(uri.ContentType), msg.Payload); } } else if (message.Protocol == ProtocolType.COAP) { CoapMessage msg = CoapMessage.DecodeMessage(message.Message); if (observableToken == null) { //request coapMessage = new CoapRequest(id, msg.MessageType == CoapMessageType.Confirmable ? RequestMessageType.Confirmable : RequestMessageType.NonConfirmable, MethodType.POST, new Uri(uriString), MediaTypeConverter.ConvertToMediaType(message.ContentType), msg.Payload); } else { //response coapMessage = new CoapResponse(id, ResponseMessageType.NonConfirmable, ResponseCodeType.Content, observableToken, MediaTypeConverter.ConvertToMediaType(message.ContentType), msg.Payload); } } else { if (observableToken == null) { //request coapMessage = new CoapRequest(id, RequestMessageType.NonConfirmable, MethodType.POST, new Uri(uriString), MediaTypeConverter.ConvertToMediaType(message.ContentType), message.Message); } else { //response coapMessage = new CoapResponse(id, ResponseMessageType.NonConfirmable, ResponseCodeType.Content, observableToken, MediaTypeConverter.ConvertToMediaType(message.ContentType), message.Message); } } return(coapMessage.Encode()); }