private void TimeOut(object o) {
//Log.Debug("$ {0}.TimeOut _tryCounter={1}", Owner.name, _tryCounter);
if(_tryCounter>0) {
MsMessage msg=null;
lock(_sendQueue) {
if(_sendQueue.Count>0) {
msg=_sendQueue.Peek();
}
}
_waitAck=false;
if(msg!=null) {
_tryCounter--;
SendIntern(msg);
} else {
ResetTimer();
_tryCounter=0;
}
return;
}
state=State.Lost;
if(Owner!=null) {
Disconnect();
if(_statistic.value) {
Stat(false, MsMessageType.GWINFO);
}
Log.Warning("{0} Lost", Owner.path);
}
lock(_sendQueue) {
_sendQueue.Clear();
}
if(_gate!=null) {
_gate.SendGw(this, new MsDisconnect());
if(_statistic.value) {
Stat(true, MsMessageType.DISCONNECT, false);
}
}
}