public function init() { if (preg_match('/COM[0-9]+/', $this->source)) { $this->_logger->log(__METHOD__ . ' Check Serial port'); // else it is COM port connection: it can be DataLogger or GSM modem ListenerProcess::addComment($this->listener->listener_id, 'hardware_recognizing', SMSCOMPort::getLinuxComName($this->source) . ' is Serial port.'); try { // try to send AT command // if script recieves "OK" - this is GSM modem. Else - it can be only DataLogger $serial = new PhpSerial($this->_logger); $this->_logger->log(__METHOD__ . $this->source); $serial->deviceSet($this->source); $serial->confFlowControl(Yii::app()->params['com_connect_params']['hardwareflowcontrol']); $serial->confBaudRate(Yii::app()->params['com_connect_params']['baudrate']); $serial->confParity(Yii::app()->params['com_connect_params']['parity']); $serial->confStopBits(Yii::app()->params['com_connect_params']['stopbits']); $serial->confCharacterLength(Yii::app()->params['com_connect_params']['databits']); $this->_connector = new GsmModemSerialConnector($this->_logger, $serial); $this->_connector->setParams(array('port' => $this->source)); ListenerProcess::addComment($this->listener->listener_id, 'hardware_recognizing', 'Script started to recognize hardware connected to PC via Serial port'); if ($this->listener->additional_param == 'SMS') { while (1) { if ($this->_connector->check()) { $this->_logger->log(__METHOD__, array('hardware' => 'modem')); $this->hardware = 'modem'; ListenerProcess::addComment($this->listener->listener_id, 'hardware_recognizing', 'Hardware connected to PC via Serial port - is GSM Modem'); $this->_logger->log(__METHOD__, array('hardware' => $this->hardware)); return true; } sleep(60); } } $this->_connector = new DataLoggerSerialConnector($this->_logger, $serial); $this->_connector->setParams(array('port' => $this->source)); if ($this->listener->additional_param == 'DIRECT') { if ($this->_connector->check()) { $this->_logger->log(__METHOD__, array('hardware' => 'datalogger')); $this->hardware = 'dl'; ListenerProcess::addComment($this->listener->listener_id, 'hardware_recognizing', 'Hardware connected to PC via Serial port - is Datalogger'); $this->_logger->log(__METHOD__, array('hardware' => $this->hardware)); return true; } } } catch (Exception $e) { $this->_logger->log(__METHOD__, array('ExceptionMessage' => $e->getMessage())); } $this->_logger->log(__METHOD__, array('hardware' => 'unknown')); $this->hardware = 'unknown'; ListenerProcess::addComment($this->listener->listener_id, 'hardware_recognizing', 'No device found.'); $this->_logger->log(__METHOD__, array('hardware' => $this->hardware)); return false; } }
public function __construct($logger, $protocol, $address, $port) { parent::__construct($logger); $this->_logger->log(__METHOD__); $this->_protocol = $protocol; $this->_address = $address; $this->_port = $port; }
protected function grabModemMessages($cycle) { $this->_logger->log(__CLASS__ . ' ' . __METHOD__, array('cycle' => $cycle)); $output = null; if ($this->_connector->readData($output) === false) { } $this->returnResult(__CLASS__ . ' ' . __METHOD__, $output); }
protected function listen() { $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ' Start listen.', array('source' => $this->source)); $messages = null; $process = $this; $logger = $process->_logger; $this->_connector->onReceiveMessage = function ($message, $station_id, $source_info) use(&$process, &$logger) { $logger->log(__CLASS__ . ' ' . __METHOD__ . ' New message', array('message' => $message, 'listener_id' => $process->listener->listener_id, 'overwrite' => $process->settings->overwrite_data_on_listening)); $messageId = ListenerLog::addNew($message, $process->listener->listener_id, $process->settings->overwrite_data_on_listening, 'server', 0, $source_info); ListenerProcess::addComment($process->listener->listener_id, 'comment', 'got msg #' . $messageId); }; $this->_connector->readData($messages); $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ' Complete listen.', array('source' => $this->source)); }
public function readData(&$output) { parent::readData($output); $xml = $this->loadXml(); if (is_null($xml)) { $this->errors[] = 'Can\'t load xml file: ' . $path; return false; } if ($this->validate($xml) === false) { $this->errors[] = 'Validation failed.'; return false; } $this->process($xml); return true; }
protected function listenDLTorrent($cycle = 1) { $this->_logger->log(__METHOD__, array('cycle' => $cycle)); $this->_connector->setParams(array('timeout' => 60)); ListenerProcess::addComment($this->listener->listener_id, 'comment', 'Opening COM connection'); $messages = null; $process = $this; $logger = $process->_logger; $this->_connector->onReceiveMessage = function ($message) use(&$process, &$logger) { $logger->log(__METHOD__ . ' New message', array('message' => $message, 'listener_id' => $process->listener->listener_id, 'overwrite' => $process->settings->overwrite_data_on_listening)); $messageId = ListenerLog::addNew($message, $process->listener->listener_id, $process->settings->overwrite_data_on_listening, 'datalogger'); ListenerProcess::addComment($process->listener->listener_id, 'comment', 'got msg #' . $messageId); }; $result = $this->_connector->readData($messages); $this->_logger->log(__METHOD__ . ' Complete listen datalogger.', array('cycle' => $cycle, 'result' => $result)); }
protected function listenPollingTemp($cycle = 1) { $this->_logger->log(__CLASS__ . ' ' . __METHOD__, array('cycle' => $cycle)); $this->_connector->setParams(array('timeout' => 60)); // 1min ListenerProcess::addComment($this->listener->listener_id, 'comment', 'Start polling'); $messages = null; $process = $this; $logger = $process->_logger; $this->_connector->onReceiveMessage = function ($message, $stationId) use(&$process, &$logger) { $logger->log(__CLASS__ . ' ' . __METHOD__ . ' New message', array('message' => $message, 'listener_id' => $process->listener->listener_id, 'overwrite' => $process->settings->overwrite_data_on_listening)); $messageId = ListenerLogTemp::addNew($message, $process->listener->listener_id, $process->settings->overwrite_data_on_listening, 'poller', $stationId); ListenerProcess::addComment($process->listener->listener_id, 'comment', 'got msg #' . $messageId); }; $result = $this->_connector->readData($messages); $this->_logger->log(__CLASS__ . ' ' . __METHOD__ . ' Complete listen datalogger.', array('cycle' => $cycle, 'result' => $result)); return $result; }
public function readData(&$output) { parent::readData($output); $this->_logger->log(__METHOD__); $master = array(); // !!! PROTOCOL (TCP by default) SHOULD BE IN LOWER CASE !!! $uri = $this->_protocol . '://' . $this->_address . ':' . $this->_port; $this->_logger->log(__METHOD__ . ' Trying to start server', array('uri' => $uri)); $server = @stream_socket_server($uri, $errno, $errstr); // stream_set_blocking($server,0); $this->_logger->log(__METHOD__ . ' Server start result', array('socket' => $server)); if ($server === false) { $this->_logger->log(__METHOD__ . ' Server start error', array('error' => $errstr, 'number' => $errno)); $this->_errors[] = $errstr . '(' . $errno . ')'; } else { $master[] = $server; $idleTime = 0; while (true) { $read = $master; $this->_logger->log(__METHOD__ . ' Waiting for event.'); $except = null; $write = null; $startTime = time(); // If timeout is null then it will wait forever. // Use null in case when reset SMS message is not needed. $modCount = @stream_select($read, $write, $except, 2000); // $idleTime += time() - $startTime; $this->_logger->log(__METHOD__ . ' Waiting result', array('count' => $modCount)); // // if ($modCount === false) { $this->_errors[] = 'Error during waiting for event.'; continue; } foreach ($read as $readStream) { if ($readStream === $server) { $this->_logger->log(__METHOD__ . ' Client connected'); // New client connected. Add to list. $client = @stream_socket_accept($server); $master[] = $client; } else { // Client did something $socketData = $this->readStringFromSocket($readStream); $this->_logger->log(__METHOD__ . ' Received data', array('data' => $socketData)); if ($socketData === false) { // Error $index = array_search($readStream, $master, true); unset($master[$index]); } else { if (strlen($socketData) === 0) { $this->_logger->log(__METHOD__ . ' Client disconnected'); // Client disconnected $index = array_search($readStream, $master, true); @fclose($readStream); unset($master[$index]); } else { // Client sent some data $this->_logger->log(__METHOD__ . ' Received message', array('message' => $socketData)); $output = preg_split("/\r\n/", $socketData, -1, PREG_SPLIT_NO_EMPTY); foreach ($output as $message) { $this->_logger->log(__METHOD__ . ' $readStream1 ' . print_r($readStream, 1)); $m = $this->onReceiveDataMessageEvent($message); // $this->_logger->log(__METHOD__. ' $readStream2 '.print_r($readStream,1)); $this->writeStringToSocket($readStream, $m); } } } } } } } }
public function readData(&$output) { parent::readData($output); }
/** * Opens COM port and tries to read messages. * @param array $output * @return boolean True if there was no errors, false - otherwise. */ public function readData(&$output) { parent::readData($output); $this->_logger->log(__METHOD__); set_error_handler(array($this, 'errorHandler')); try { if ($this->_serial->deviceSet($this->_port) === true) { if (!is_null($this->_baudrate)) { $this->_serial->confBaudRate($this->_baudrate); } if (!is_null($this->_flowControl)) { $this->_serial->confFlowControl($this->_flowControl); } if (!is_null($this->_parity)) { $this->_serial->confParity($this->_parity); } if (!is_null($this->_stopBits)) { $this->_serial->confStopBits($this->_stopBits); } if (!is_null($this->_dataBits)) { $this->_serial->confCharacterLength($this->_dataBits); } if ($this->_serial->deviceOpen('r+b') === true) { $this->readCustomData($output); $this->_serial->deviceClose(); } else { $this->_errors[] = 'Can\'t open port "' . $this->_port . '".'; } } else { $this->_errors[] = 'Can\'t set port "' . $this->_port . '".'; } } catch (Exception $ex) { if ($this->_serial->_dState === PhpSerial::SERIAL_DEVICE_OPENED) { $this->_serial->deviceClose(); } $this->_errors[] = $ex->getMessage(); } restore_error_handler(); $result = count($this->_errors) === 0; return $this->returnResult(__METHOD__, $result); }
public function readData(&$output) { parent::readData($output); $this->_logger->log(__METHOD__); return $this->pollDataFromStation($this->_station, $this->_timeout); }