public CoapProtocolAdapter(PiraeusConfig config, IAuthenticator authenticator, IChannel channel, ILogger logger, HttpContext context = null) { this.context = context; this.logger = logger; CoapConfigOptions options = config.ObserveOption && config.NoResponseOption ? CoapConfigOptions.Observe | CoapConfigOptions.NoResponse : config.ObserveOption ? CoapConfigOptions.Observe : config.NoResponseOption ? CoapConfigOptions.NoResponse : CoapConfigOptions.None; CoapConfig coapConfig = new CoapConfig(authenticator, config.CoapAuthority, options, config.AutoRetry, config.KeepAliveSeconds, config.AckTimeoutSeconds, config.AckRandomFactor, config.MaxRetransmit, config.NStart, config.DefaultLeisure, config.ProbingRate, config.MaxLatencySeconds); coapConfig.IdentityClaimType = config.ClientIdentityNameClaimType; coapConfig.Indexes = config.GetClientIndexes(); InitializeAuditor(config); Channel = channel; Channel.OnClose += Channel_OnClose; Channel.OnError += Channel_OnError; Channel.OnOpen += Channel_OnOpen; Channel.OnReceive += Channel_OnReceive; Channel.OnStateChange += Channel_OnStateChange; session = new CoapSession(coapConfig, context); if (Channel.State != ChannelState.Open) { Channel.OpenAsync().GetAwaiter(); Channel.ReceiveAsync(); } }
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()); }
public CoapRequestDispatcher(CoapSession session, IChannel channel) { this.channel = channel; this.session = session; auditor = AuditFactory.CreateSingleton().GetAuditor(AuditType.Message); coapObserved = new Dictionary <string, byte[]>(); coapUnobserved = new HashSet <string>(); adapter = new OrleansAdapter(session.Identity, channel.TypeId, "CoAP"); adapter.OnObserve += Adapter_OnObserve; LoadDurablesAsync().LogExceptions(); }
public CoapRequestDispatcher(CoapSession session, IChannel channel, PiraeusConfig config, GraphManager graphManager, ILog logger = null) { this.channel = channel; this.session = session; this.config = config; this.graphManager = graphManager; this.logger = logger; auditor = AuditFactory.CreateSingleton().GetAuditor(AuditType.Message); coapObserved = new Dictionary <string, byte[]>(); coapUnobserved = new HashSet <string>(); adapter = new OrleansAdapter(session.Identity, channel.TypeId, "CoAP", graphManager, logger); adapter.OnObserve += Adapter_OnObserve; LoadDurablesAsync().LogExceptions(logger); }
public PiraeusCoapClient(CoapConfig config, IChannel channel, ICoapRequestDispatch dispatcher = null) { this.config = config; pingId = new List <ushort>(); session = new CoapSession(config); observers = new Dictionary <string, string>(); this.dispatcher = dispatcher; this.channel = channel; this.channel.OnClose += Channel_OnClose; this.channel.OnError += Channel_OnError; this.channel.OnOpen += Channel_OnOpen; this.channel.OnStateChange += Channel_OnStateChange; this.channel.OnReceive += Channel_OnReceive; session.OnRetry += Session_OnRetry; session.OnKeepAlive += Session_OnKeepAlive; session.IsAuthenticated = true; usedToken = true; queue = new Queue <byte[]>(); }