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