/**
  * 
  * @access protected
  */
 protected function trySendSms()
 {
     $this->_logger->log(__METHOD__);
     if (is_null($this->_smsMessageSender)) {
         $this->_logger->log(__METHOD__ . ' Sms sender is null -> don\'t send message.');
         return;
     }
     if ($this->_sentSmsCount >= 3) {
         $this->_logger->log(__METHOD__ . ' Reset SMS message limit is exceeded.');
         return;
     }
     $this->_logger->log(__METHOD__ . ' Sending reset SMS message', array('station' => $this->_smsParams['station_code']));
     if ($this->_smsMessageSender->send()) {
         $this->_sentSmsCount += 1;
         $this->_logger->log(__METHOD__ . ' SMS message has been sent');
     } else {
         $this->_logger->log(__METHOD__ . ' Failed to send SMS message');
     }
 }
 public function run()
 {
     ListenerProcess::addComment($this->listener->listener_id, 'comment', 'going to start polling, source= ' . $this->source);
     $failureCount = 0;
     $modemFailureCount = 0;
     $resetSmsMessageWasSent = false;
     $modemReset = false;
     $i = 0;
     while (true) {
         $time = time();
         for ($j = 0; $j < 4; $j++) {
             $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ': Trying to poll data', array('try' => $j));
             // If message was received then exit loop
             if ($this->listenPollingTemp($i++)) {
                 $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ': Message received on', array('try' => $j));
                 $resetSmsMessageWasSent = false;
                 $modemReset = false;
                 break;
             }
             $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ': Delay 1 minute before next try.');
             // Wait 1 minute before next try
             sleep(60);
             // 1min
             if ($j === 3) {
                 $failureCount++;
                 $modemFailureCount++;
             }
         }
         if (!is_null($this->_smsMessageSender) && $failureCount >= Yii::app()->params['sms_params']['failure_count_before_send_sms']) {
             $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ': Going to send reset SMS message.', array('try' => $resetSmsMessageWasSent + 1));
             $failureCount = 0;
             if ($resetSmsMessageWasSent > 3) {
                 $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ' Reset SMS message was already sent');
             } else {
                 if ($this->_smsMessageSender->send()) {
                     $resetSmsMessageWasSent += 1;
                     $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ' SMS message has been sent');
                 } else {
                     $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ' Failed to send SMS message');
                 }
             }
         }
         if ($modemFailureCount >= Yii::app()->params['polling_params']['failure_count_before_modem_reset']) {
             if (Yii::app()->params['polling_params']['enabled'] === true) {
                 $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ': Going to reset polling modem.');
                 $modemFailureCount = 0;
                 if ($modemReset) {
                     $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ' Modem was already reset.');
                 } else {
                     $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ': Resetting.');
                     ListenerProcess::addComment($this->listener->listener_id, 'modem_reset', ' Polling modem was reset.');
                     // Send KILL to wvdial to force modem to re-create connection
                     It::runAsynchCommand('sudo killall wvdial');
                     $modemReset = true;
                 }
             } else {
                 $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ': Resetting of polling modem is disabled.');
             }
         }
         // Delay for 10 minutes - time spent on tries.
         $time = Yii::app()->params['polling_params']['interval'] - (time() - $time);
         $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ': Delay before next poll', array('seconds' => $time));
         sleep($time);
     }
 }