Пример #1
0
        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();
            }
        }
Пример #2
0
        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());
        }
Пример #3
0
 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);
 }
Пример #5
0
        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[]>();
        }