コード例 #1
0
        internal void InternalGeneralSubscribe(string topicId, ActionStringDelegate actionToTakeOnReceivedMessage)
        {
            var fullTopic = topicId;

            // Keeping a subscribtion topic list, because it is needed when (re)connecting to broker.
            if (_topicHandlerMap.Contains(fullTopic) == false)
            {
                _topicHandlerMap.Add(fullTopic, new ArrayList());
            }

            ((ArrayList)_topicHandlerMap[fullTopic]).Add(actionToTakeOnReceivedMessage);
            _subscriptionList.Add(fullTopic);

            if (IsConnected)
            {
                _broker.Subscribe(fullTopic);
            }
        }
コード例 #2
0
        /// <summary>
        /// Initializes the entire Client Device tree: actually creates internal property variables, subscribes to topics and so on. This method must be called, or otherwise entire Client Device tree will not work.
        /// </summary>
        public void Initialize(IClientDeviceConnection broker)
        {
            base.Initialize(broker, NLog.LogManager.GetCurrentClassLogger());

            // Initializing properties. They will start using broker immediatelly.
            foreach (ClientPropertyBase property in _properties)
            {
                property.Initialize(this);
            }

            var homieTopic = $"{_baseTopic}/{DeviceId}/$homie";
            ActionStringDelegate handlerForTopicHomie = delegate(string value) {
                HomieVersion = value;
                RaisePropertyChanged(this, new PropertyChangedEventArgs(nameof(HomieVersion)));
            };

            InternalGeneralSubscribe(homieTopic, handlerForTopicHomie);

            var nameTopic = $"{_baseTopic}/{DeviceId}/$name";
            ActionStringDelegate handlerForTopicName = delegate(string value) {
                Name = value;
                RaisePropertyChanged(this, new PropertyChangedEventArgs(nameof(Name)));
            };

            InternalGeneralSubscribe(nameTopic, handlerForTopicName);

            var stateTopic = $"{_baseTopic}/{DeviceId}/$state";
            ActionStringDelegate handlerForTopicState = delegate(string value) {
                if (Helpers.TryParseHomieState(value, out var parsedState))
                {
                    State = parsedState;
                    RaisePropertyChanged(this, new PropertyChangedEventArgs(nameof(State)));
                }
                ;
            };

            InternalGeneralSubscribe(stateTopic, handlerForTopicState);
        }
コード例 #3
0
 internal void InternalPropertySubscribe(string propertyTopic, ActionStringDelegate actionToTakeOnReceivedMessage)
 {
     InternalGeneralSubscribe($"{_baseTopic}/{DeviceId}/{propertyTopic}", actionToTakeOnReceivedMessage);
 }