X13.Periphery.MsDevice.ITopicOwned C# (CSharp) Method

ITopicOwned() private method

private ITopicOwned ( Topic owner ) : void
owner Topic
return void
    void ITopicOwned.SetOwner(Topic owner) {
      if(Owner!=owner) {
        if(Owner!=null) {
          if(_subsscriptions!=null) {
            foreach(var s in _subsscriptions) {
              Owner.Unsubscribe(s.path, s.func);
            }
            _subsscriptions.Clear();
          }
          _stateVar=null;
          if(_activeTimer!=null) {
            _activeTimer.Change(Timeout.Infinite, Timeout.Infinite);
          }
        }
        Owner=owner;
        if(Owner!=null) {
          _stateVar=Owner.Get<State>(".cfg/_state");
          if(Topic.brokerMode) {
            Owner.saved=true;
            Owner.Get<string>(".cfg/_declarer").value="mqtts_cfg";
            var dc=Owner.Get<string>("_declarer", Owner);
            dc.saved=true;
            dc.value=_declarer;
            _present=Owner.Get<bool>("present", Owner);
            _present.saved=false;
            _present.value=(state==State.Connected || state==State.ASleep || state==State.AWake);

            Topic oldT;
            if(!string.IsNullOrEmpty(backName) && backName!=Owner.name && Owner.parent.Exist(backName, out oldT) && oldT.valueType==typeof(MsDevice)) {   // Device renamed
              MsDevice old=(oldT as DVar<MsDevice>).value;
              if(old!=null) {
                Addr=old.Addr;
                old._gate.SendGw(this, new MsPublish(null, PredefinedTopics["_sName"], QoS.AtLeastOnce) { MessageId=old.NextMsgId(), Data=Encoding.UTF8.GetBytes(Owner.name.Substring(0, Owner.name.Length)) });
                this.state=State.Disconnected;
              }
            }
            backName=Owner.name;
          }
        }
      }
    }
    #endregion ITopicOwned Members