private void Connect(MsConnect msg) {
if(Owner==null) {
Thread.Sleep(30);
}
if(msg.CleanSession) {
foreach(var s in _subsscriptions) {
Owner.Unsubscribe(s.path, s.func);
}
_subsscriptions.Clear();
_topics.Clear();
lock(_sendQueue) {
_sendQueue.Clear();
}
_waitAck=false;
}
_duration=msg.Duration*1100;
ResetTimer();
if(msg.Will) {
_willPath=string.Empty;
_wilMsg=null;
if(msg.CleanSession) {
Log.Info("{0}.state {1} => WILLTOPICREQ", Owner.path, state);
}
state=State.WillTopic;
Send(new MsMessage(MsMessageType.WILLTOPICREQ));
} else {
if(msg.CleanSession) {
Log.Info("{0}.state {1} => PreConnect", Owner.path, state);
state=State.PreConnect;
} else {
state=State.Connected;
}
Send(new MsConnack(MsReturnCode.Accepted));
}
via=_gate.name;
if(_statistic.value) {
Stat(false, MsMessageType.CONNECT, msg.CleanSession);
}
}
//TODO: Unsubscribe