/**
  * Start process
  * @param array $arg
  * @return int|void
  * @this_server Synchronization
  * @messagesToSend ForwardedMessage
  * @TcpSocketClientConnector TcpSocketClientConnector
  */
 public function run($arg)
 {
     $this_server = new Synchronization();
     $messagesToSend = ForwardedMessage::model()->getNewMessages();
     foreach ($messagesToSend as $message) {
         if (!is_object($message)) {
             continue;
         }
         $TcpSocketClientConnector = new TcpSocketClientConnector($this->_logger, 'tcp', $this_server->remote_server_ip, $this_server->remote_server_port);
         $TcpSocketClientConnector->connect($timeout = 5);
         $message = serialize(array('message' => $message->message->message));
         $TcpSocketClientConnector->sendMessage($message, $timeout = 5);
         //            $inputDataFromServer =  $TcpSocketClientConnector->readDataFromServer();
         //            $serverData = unserialize($inputDataFromServer);
         $TcpSocketClientConnector->disconnect();
     }
     //        $this->_logger->log(__METHOD__ .' inputDataFromServer: '. $inputDataFromServer);
     //        $this->_logger->log(__METHOD__ .' serverData: '.print_r( $serverData,1));
 }
 protected function dataExchange()
 {
     $TcpSocketClientConnector = new TcpSocketClientConnector($this->_logger, 'tcp', $this->_synchronization->remote_server_ip, $this->_synchronization->tcp_client_command_port);
     // send to server
     $TcpSocketClientConnector->onSentMessage = function ($coming_message) {
         // $this->_logger->log(' $comming_message '.print_r($coming_message,1));
         $answer = 'FALSE';
         $exchangeArray = array(ExchangeODSS::getInstance());
         foreach ($exchangeArray as &$exchangeItem) {
             if ($exchangeItem->init($coming_message)) {
                 $answer = $exchangeItem->clientMessage();
             } else {
                 $exchangeItem->getErrors();
                 $this->_logger->log(' ERRORS ' . print_r($exchangeItem->getErrors(), 1));
             }
         }
         return $answer;
     };
     $TcpSocketClientConnector->onCloseConnection = function ($serverMessage) {
         $this->_logger->log(' $serverMessage ' . print_r(@unserialize($serverMessage), 1));
         $exchangeArray = array(ExchangeODSS::getInstance());
         foreach ($exchangeArray as &$exchangeItem) {
             if ($exchangeItem->init($serverMessage)) {
                 if ($exchangeItem->closeConnection()) {
                     return true;
                 }
             }
         }
         return false;
     };
     //comes messages
     $TcpSocketClientConnector->onReceiveDataMessage = function ($message) {
         //$this->_logger->log(__METHOD__.' $message : '. print_r($message,1));
         $validMessage = "FALSE";
         $exchangeArray = array(ExchangeODSS::getInstance());
         foreach ($exchangeArray as &$exchangeItem) {
             if ($exchangeItem->init($message)) {
                 $validMessage = $exchangeItem->returnReceivedMessage();
             } else {
                 $exchangeItem->getErrors();
                 $this->_logger->log(' ERRORS ' . print_r($exchangeItem->getErrors(), 1));
             }
         }
         return $validMessage;
     };
     $exchangeArray = array(ExchangeODSS::getInstance());
     foreach ($exchangeArray as &$exchangeItem) {
         $TcpSocketClientConnector->connect($timeout = 1);
         $messageToServer = $exchangeItem->clientMessage();
         $this->_logger->log(' $messageToServer ' . print_r($messageToServer, 1));
         $TcpSocketClientConnector->sendMessage($messageToServer, $timeout = 1);
     }
 }