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

SendIntern() private method

private SendIntern ( MsMessage msg ) : void
msg MsMessage
return void
    private void SendIntern(MsMessage msg) {
      while(state==State.AWake || (msg!=null && (state!=State.ASleep || msg.MsgTyp==MsMessageType.DISCONNECT))) {
        if(msg!=null) {
          if(_gate!=null) {
            if(_statistic.value) {
              Stat(true, msg.MsgTyp, ((msg is MsPublish && (msg as MsPublish).Dup) || (msg is MsSubscribe && (msg as MsSubscribe).dup)));
            }
            try {
              _gate.SendGw(this, msg);
            }
            catch(ArgumentOutOfRangeException ex) {
              Log.Warning("{0} - {1}", this.name, ex.Message);
              if(msg.IsRequest) {
                lock(_sendQueue) {
                  if(_sendQueue.Count>0 && _sendQueue.Peek()==msg) {
                    _sendQueue.Dequeue();
                    _waitAck=false;
                  }
                }
              }
              msg=null;
            }
          }
          if(msg!=null && msg.IsRequest) {
            ResetTimer(_rand.Next(ACK_TIMEOUT, ACK_TIMEOUT*5/3)/(_tryCounter+1));  // 600, 1000
            _waitAck=true;
            break;
          }
          if(_waitAck) {
            break;
          }
        }
        msg=null;
        lock(_sendQueue) {
          if(_sendQueue.Count==0 && state==State.AWake) {
            if(_gate!=null) {
              _gate.SendGw(this, new MsMessage(MsMessageType.PINGRESP));
              if(_statistic.value) {
                Stat(true, MsMessageType.PINGRESP, false);
              }
            }
            var st=Owner.Get<long>(".cfg/XD_SleepTime", Owner);
            ResetTimer(st.value>0?(3100+(int)st.value*1550):_duration);  // t_wakeup
            state=State.ASleep;
            break;
          }
          if(_sendQueue.Count>0 && !(msg=_sendQueue.Peek()).IsRequest) {
            _sendQueue.Dequeue();
          }
        }
      }
    }
    private void ResetTimer(int period=0) {