Ejemplo n.º 1
0
 /**
  * socket输入接口
  *	将外部数据同步到内部服务器
  */
 public static function sinput()
 {
     $loger = new Pft_Log_File('syncsocket');
     //访问权限判断
     if (!Pft_Sync_MessageListManage::interfaceAuth('InitiativeInput')) {
         $loger->log('没有访问socket输入接口的权限');
         exit;
     }
     //判断是否锁定
     if (Pft_Sync_MessageListManage::isLock('sinput')) {
         //如果锁定
         $loger->log('socket输入接口已锁定');
         exit;
     }
     //锁定接口
     Pft_Sync_MessageListManage::AddLock('sinput');
     //判断服务端是否正常
     //-----------------处理unknown目录中的 start-----------------//
     //判断是否存在消息序列汇总文件,如果存在删除unkonwn下的所有消息序列和汇总文件并删除外部的消息序列汇总文件
     $result = Pft_Sync_MessageListManage::isexistLocalMsgListFile('unknown/', 'msgListfile.msg');
     if ($result == '1') {
         //删除本地unknown下的消息序列汇总文件
         $result = Pft_Sync_SyncSocket::delFile('unknown/', 'msgListfile.msg');
         if ($result != '1') {
             $loger->log('socket输入接口删除本地消息序列汇总文件失败');
             //解除锁定
             Pft_Sync_MessageListManage::DelLock('sinput');
             exit;
         }
         //判断是否有未知的消息序列
         $unknownMsglistArray = Pft_Sync_MessageListManage::getAllUnknownMsgListSign();
         if (is_array($unknownMsglistArray) && count($unknownMsglistArray)) {
             //删除unknown目录下的所有msglist
             $result = delMessageList($unknownMsglistArray, 'unknown');
             if ($result != '1') {
                 $loger->log('socket输入接口删除本地unknown目录下的消息序列文件失败');
                 //解除锁定
                 Pft_Sync_MessageListManage::DelLock('sinput');
                 exit;
             }
         }
         //删除外部sync下的消息序列汇总文件
         $result = Pft_Sync_SyncSocket::syncInterface('del', '');
         if ($result != '1') {
             $loger->log('socket输入接口删除外部消息序列汇总文件失败');
             //解除锁定
             Pft_Sync_MessageListManage::DelLock('sinput');
             exit;
         }
     } else {
         //不存在
         //判断是否有未知的消息序列
         $unknownMsglistArray = Pft_Sync_MessageListManage::getAllUnknownMsgListSign();
         if (is_array($unknownMsglistArray) && count($unknownMsglistArray)) {
             //删除外部sync下的消息序列汇总文件
             $result = Pft_Sync_SyncSocket::syncInterface('del', '');
             if ($result != '1') {
                 $loger->log('socket输入接口删除消息序列汇总文件失败');
                 //解除锁定
                 Pft_Sync_MessageListManage::DelLock('sinput');
                 exit;
             }
             //告诉外部删除消息序列
             $result = Pft_Sync_SyncSocket::syncInterface('delmsglistsync', $unknownMsglistArray);
             if ($result != '1') {
                 $loger->log('socket输入接口删除sync目录下的消息序列文件失败');
                 //解除锁定
                 Pft_Sync_MessageListManage::DelLock('sinput');
                 exit;
             }
             //将消息序列从unknown移动到outsite
             $result = Pft_Sync_MessageListManage::moveMsglistUnknown($msgList_execute);
             if ($result != '1') {
                 $loger->log('socket输入接口将消息序列从unknown移动到outsite失败');
                 //解除锁定
                 Pft_Sync_MessageListManage::DelLock('sinput');
                 exit;
             }
             $result = Pft_Sync_MessageListManage::execMsgList();
             if ($result != '1') {
                 $loger->log('socket输入接口执行outsite目录下的消息序列文件失败');
                 //解除锁定
                 Pft_Sync_MessageListManage::DelLock('sinput');
                 exit;
             }
         }
     }
     //-----------------处理unknown目录中的 end-----------------//
     //向外部发送获取消息序列的命令
     $msgListFile_size = Pft_Sync_SyncSocket::syncInterface('getorder', '');
     if (!$msgListFile_size) {
         $loger->log('socket输入接口生成外部消息序列汇总文件内容失败');
         //解除锁定
         Pft_Sync_MessageListManage::DelLock('sinput');
         exit;
     }
     //-------分块获取文件 start
     $count = ceil($msgListFile_size / 1000);
     //将文件
     for ($i = 1; $i <= $count; $i++) {
         $order_str = 'get_' . $i . '_' . $count;
         //获取指定段的文件内容
         $result = Pft_Sync_SyncSocket::syncInterface('get', $order_str);
         if (!$result) {
             $loger->log('socket输入接口获取外部消息序列汇总文件内容失败');
             //解除锁定
             Pft_Sync_MessageListManage::DelLock('sinput');
             exit;
         } else {
             //写内部消息序列文件
             //创建文件的条件判断
             $re = Pft_Sync_MessageListManage::createdMsgListFile($result, $i);
             if ($re) {
                 //创建成功
             } else {
                 //失败
                 $loger->log('socket输入接口创建本地消息序列汇总文件内容失败');
                 //解除锁定
                 Pft_Sync_MessageListManage::DelLock('sinput');
                 exit;
             }
         }
     }
     //-------分块获取文件 end
     //判断消息序列汇总文件大小是否一致
     $fsize = Pft_Sync_MessageListManage::getLocalMsgListFileSize('unknown/', 'msgListfile.msg');
     if ($msgListFile_size != $fsize) {
         $loger->log('socket输入接口消息序列汇总文件大小不一致');
         //解除锁定
         Pft_Sync_MessageListManage::DelLock('sinput');
         exit;
     }
     //执行消息序列汇总文件
     $msgsignarr = Pft_Sync_MessageListManage::execMsgListFile();
     if (is_array($msgsignarr) && count($msgsignarr)) {
         //删除外部sync下的消息序列汇总文件
         $result = Pft_Sync_SyncSocket::syncInterface('del', '');
         if ($result != '1') {
             $loger->log('socket输入接口删除消息序列汇总文件失败');
             //解除锁定
             Pft_Sync_MessageListManage::DelLock('sinput');
             exit;
         }
         //告诉外部删除消息序列
         $result = Pft_Sync_SyncSocket::syncInterface('delmsglistsync', $msgsignarr);
         if ($result != '1') {
             $loger->log('socket输入接口删除sync目录下的消息序列文件失败');
             //解除锁定
             Pft_Sync_MessageListManage::DelLock('sinput');
             exit;
         }
         //将消息序列从unknown移动到outsite
         $result = Pft_Sync_MessageListManage::moveMsglistUnknown($msgList_execute);
         if ($result != '1') {
             $loger->log('socket输入接口将消息序列从unknown移动到outsite失败');
             //解除锁定
             Pft_Sync_MessageListManage::DelLock('sinput');
             exit;
         }
         $result = Pft_Sync_MessageListManage::execMsgList();
         if ($result != '1') {
             $loger->log('socket输入接口执行outsite目录下的消息序列文件失败');
             //解除锁定
             Pft_Sync_MessageListManage::DelLock('sinput');
             exit;
         }
     } else {
         $loger->log('socket输入接口执行消息序列汇总文件失败');
         //解除锁定
         Pft_Sync_MessageListManage::DelLock('sinput');
         exit;
     }
     //解除锁定
     Pft_Sync_MessageListManage::DelLock('sinput');
 }