/** * 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'); }