/** * 主动输入接口 * * 功能:从指定的被动输出接口获取序列文件存放到本地 * 参数:无 * 返回值:无 */ 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'); }