Ejemplo n.º 1
0
 /**
  * 主动输入接口
  * 
  * 功能:从指定的被动输出接口获取序列文件存放到本地
  * 参数:无
  * 返回值:无
  */
 public static function InitiativeInput()
 {
     $loger = new Pft_Log_File('sync');
     //访问权限判断
     if (!Pft_Sync_MessageListManage::interfaceAuth('InitiativeInput')) {
         $loger->log('没有访问主动输入接口的权限');
         exit;
     }
     //判断是否锁定
     if (Pft_Sync_MessageListManage::isLock('input')) {
         //如果锁定
         exit;
     }
     //锁定接口
     Pft_Sync_MessageListManage::AddLock('input');
     //读取本地设置,找到要访问的被动输出接口
     $passiveOutputAddress = Pft_Sync_MessageListManage::getPassiveOutputInterface();
     if (is_array($passiveOutputAddress) && count($passiveOutputAddress)) {
         //被动输出接口数组,主动输入,主动输出方式 同步模式(SyncMode)为1时执行
     } else {
         if ($passiveOutputAddress) {
             //同步模式(SyncMode)不为1时执行
             //访问被动输出接口,获取序列数据(消息序列和消息SQL)
             $data = array('validatePassword' => Pft_Sync_MessageListManage::getValidatePassword());
             $msgALL = BaseOption::postToHost($passiveOutputAddress, $data);
             $msgALL = unserialize(urldecode($msgALL));
             $msgList = $msgALL['msgList'];
             $msgSql = $msgALL['msgSql'];
             //-------------------------处理sql消息 start-------------------------//
             //sql消息的处理
             if (is_array($msgSql) && count($msgSql)) {
                 foreach ($msgSql as $k => $v) {
                     $re = Pft_Sync_MessageListManage::createMsgSql($v, $k);
                     if ($re == $k) {
                         //写日志
                         $str = "在内部创建消息SQL:" . $k . "成功,内容:" . $v;
                         $loger->log($str);
                         //告诉被访问方的服务器更改序列文件(返回更改成功的序列标识)
                         $data = array('msgSign' => urlencode(serialize($k)), 'validatePassword' => Pft_Sync_MessageListManage::getValidatePassword(), 'msgType' => 'msgSql');
                         $re = BaseOption::postToHost($passiveOutputAddress, $data);
                         if ($re == '1') {
                             //删除成功
                             $loger->log('删除外部msgsql:' . $k . '成功');
                         } else {
                             $loger->log('删除外部msgsql:' . $k . '失败');
                         }
                     } else {
                         //写日志
                         $str = "在内部创建消息SQL:" . $k . "失败,内容:" . $v;
                         $loger->log($str);
                     }
                 }
             }
             //-------------------------处理sql消息 end-------------------------//
             //-------------------------处理消息序列 start-------------------------//
             //-----------------处理unknown目录中的 start-----------------//
             //判断是否有未知的消息序列
             $unknownMsglistArray = Pft_Sync_MessageListManage::getAllUnknownMsgListSign();
             if (is_array($unknownMsglistArray) && count($unknownMsglistArray)) {
                 $loger->log('存在未知消息序列');
                 //告诉被访问方的服务器更改序列文件(返回更改成功的序列标识)
                 $data = array('msgSign' => urlencode(serialize($unknownMsglistArray)), 'validatePassword' => Pft_Sync_MessageListManage::getValidatePassword(), 'msgType' => 'msgList');
                 //删除序列
                 $del_result_unknown = BaseOption::postToHost($passiveOutputAddress, $data);
                 $n_unknown = 10;
                 while ($n_unknown > 1) {
                     if ($del_result_unknown != 1) {
                         //没有返回删除成功的标记
                         $del_result_unknown = BaseOption::postToHost($passiveOutputAddress, $data);
                     } else {
                         $loger = new Pft_Log_File('sync');
                         $loger->log('未知消息序列确认成功');
                         //从未知目录移到正常目录
                         Pft_Sync_MessageListManage::moveMsglistUnknown($unknownMsglistArray);
                         //Pft_Sync_MessageListManage::moveMsglistUnknown($msgList_execute);
                         break;
                     }
                     $n_unknown--;
                 }
                 //循环n次后还没有删除成功
                 if ($del_result_unknown != 1) {
                     //解除锁定
                     Pft_Sync_MessageListManage::DelLock('input');
                     exit;
                 }
             }
             //-----------------处理unknown目录中的 end-----------------//
             $msgList_execute = array();
             $num_del = Pft_Sync_MessageListManage::getNumOnceDel();
             //一次删除消息序列的个数
             //消息序列的处理
             if (is_array($msgList) && count($msgList)) {
                 foreach ($msgList as $key => $val) {
                     $str = Pft_Sync_MessageListManage::formatMsg($val);
                     $loger = new Pft_Log_File('sync');
                     $loger->log($str);
                     //调用消息序列管理器,更改本地消息序列
                     if (Pft_Sync_MessageListManage::createMsgList($val, $key, 'unknown')) {
                         //成功
                         //exit;
                         //写日志
                         $str = "在内部创建消息序列:" . $key . "成功";
                         $loger = new Pft_Log_File('sync');
                         $loger->log($str);
                         //记录执行成功的消息序列到数组
                         $msgList_execute[] = $key;
                     } else {
                         //写序列失败
                         $str = "在内部创建消息序列:" . $key . "失败";
                         $loger = new Pft_Log_File('sync');
                         $loger->log($str);
                         //解除锁定
                         Pft_Sync_MessageListManage::DelLock('input');
                         exit;
                     }
                     //告诉被访问方的服务器删除执行完成的序列文件(返回更改成功的序列标识)
                     if (count($msgList_execute) == $num_del) {
                         //达到要求的数目后删除
                         //告诉被访问方的服务器更改序列文件(返回更改成功的序列标识)
                         $data = array('msgSign' => urlencode(serialize($msgList_execute)), 'validatePassword' => Pft_Sync_MessageListManage::getValidatePassword(), 'msgType' => 'msgList');
                         //删除序列
                         $del_result = BaseOption::postToHost($passiveOutputAddress, $data);
                         $n = 10;
                         while ($n > 1) {
                             if ($del_result != 1) {
                                 //没有返回删除成功的标记
                                 $del_result = BaseOption::postToHost($passiveOutputAddress, $data);
                             } else {
                                 break;
                             }
                             $n--;
                         }
                         //循环n次后还没有删除成功
                         if ($del_result != 1) {
                             //解除锁定
                             Pft_Sync_MessageListManage::DelLock('input');
                             exit;
                         } else {
                             //转移消息序列到outside目录
                             Pft_Sync_MessageListManage::moveMsglistUnknown($msgList_execute);
                             $msgList_execute = array();
                         }
                     }
                 }
                 //告诉被访问方的服务器删除执行完成的序列文件(返回更改成功的序列标识)
                 if (count($msgList_execute)) {
                     //循环完成后没有达到要求删除数目的删除
                     $data = array('msgSign' => urlencode(serialize($msgList_execute)), 'validatePassword' => Pft_Sync_MessageListManage::getValidatePassword(), 'msgType' => 'msgList');
                     //删除序列
                     $del_result = BaseOption::postToHost($passiveOutputAddress, $data);
                     $n = 10;
                     while ($n > 1) {
                         if ($del_result != 1) {
                             //没有返回删除成功的标记
                             $del_result = BaseOption::postToHost($passiveOutputAddress, $data);
                         } else {
                             break;
                         }
                         $n--;
                     }
                     //循环n次后还没有删除成功
                     if ($del_result != 1) {
                         //解除锁定
                         Pft_Sync_MessageListManage::DelLock('input');
                         exit;
                     } else {
                         //从未知移动到外部
                         Pft_Sync_MessageListManage::moveMsglistUnknown($msgList_execute);
                         $msgList_execute = array();
                     }
                 }
             }
             //-------------------------处理消息序列 end-------------------------//
         }
     }
     //解除锁定
     Pft_Sync_MessageListManage::execMsgList();
     Pft_Sync_MessageListManage::DelLock('input');
 }