/** * socket输入接口 * 将外部数据同步到内部服务器 */ public static function sinput() { $loger = new Watt_Log_File('syncsocket'); //访问权限判断 if (!Watt_Sync_MessageListManage::interfaceAuth('InitiativeInput')) { $loger->log('没有访问socket输入接口的权限'); exit; } //判断是否锁定 if (Watt_Sync_MessageListManage::isLock('sinput')) { //如果锁定 $loger->log('socket输入接口已锁定'); exit; } //锁定接口 Watt_Sync_MessageListManage::AddLock('sinput'); //判断服务端是否正常 //-----------------处理unknown目录中的 start-----------------// //判断是否存在消息序列汇总文件,如果存在删除unkonwn下的所有消息序列和汇总文件并删除外部的消息序列汇总文件 $result = Watt_Sync_MessageListManage::isexistLocalMsgListFile('unknown/', 'msgListfile.msg'); if ($result == '1') { //删除本地unknown下的消息序列汇总文件 $result = Watt_Sync_SyncSocket::delFile('unknown/', 'msgListfile.msg'); if ($result != '1') { $loger->log('socket输入接口删除本地消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } //判断是否有未知的消息序列 $unknownMsglistArray = Watt_Sync_MessageListManage::getAllUnknownMsgListSign(); if (is_array($unknownMsglistArray) && count($unknownMsglistArray)) { //删除unknown目录下的所有msglist $result = delMessageList($unknownMsglistArray, 'unknown'); if ($result != '1') { $loger->log('socket输入接口删除本地unknown目录下的消息序列文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } } //删除外部sync下的消息序列汇总文件 $result = Watt_Sync_SyncSocket::syncInterface('del', ''); if ($result != '1') { $loger->log('socket输入接口删除外部消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } } else { //不存在 //判断是否有未知的消息序列 $unknownMsglistArray = Watt_Sync_MessageListManage::getAllUnknownMsgListSign(); if (is_array($unknownMsglistArray) && count($unknownMsglistArray)) { //删除外部sync下的消息序列汇总文件 $result = Watt_Sync_SyncSocket::syncInterface('del', ''); if ($result != '1') { $loger->log('socket输入接口删除消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } //告诉外部删除消息序列 $result = Watt_Sync_SyncSocket::syncInterface('delmsglistsync', $unknownMsglistArray); if ($result != '1') { $loger->log('socket输入接口删除sync目录下的消息序列文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } //将消息序列从unknown移动到outsite $result = Watt_Sync_MessageListManage::moveMsglistUnknown($msgList_execute); if ($result != '1') { $loger->log('socket输入接口将消息序列从unknown移动到outsite失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } $result = Watt_Sync_MessageListManage::execMsgList(); if ($result != '1') { $loger->log('socket输入接口执行outsite目录下的消息序列文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } } } //-----------------处理unknown目录中的 end-----------------// //向外部发送获取消息序列的命令 $msgListFile_size = Watt_Sync_SyncSocket::syncInterface('getorder', ''); if (!$msgListFile_size) { $loger->log('socket输入接口生成外部消息序列汇总文件内容失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } //-------分块获取文件 start $count = ceil($msgListFile_size / 1000); //将文件 for ($i = 1; $i <= $count; $i++) { $order_str = 'get_' . $i . '_' . $count; //获取指定段的文件内容 $result = Watt_Sync_SyncSocket::syncInterface('get', $order_str); if (!$result) { $loger->log('socket输入接口获取外部消息序列汇总文件内容失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } else { //写内部消息序列文件 //创建文件的条件判断 $re = Watt_Sync_MessageListManage::createdMsgListFile($result, $i); if ($re) { //创建成功 } else { //失败 $loger->log('socket输入接口创建本地消息序列汇总文件内容失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } } } //-------分块获取文件 end //判断消息序列汇总文件大小是否一致 $fsize = Watt_Sync_MessageListManage::getLocalMsgListFileSize('unknown/', 'msgListfile.msg'); if ($msgListFile_size != $fsize) { $loger->log('socket输入接口消息序列汇总文件大小不一致'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } //执行消息序列汇总文件 $msgsignarr = Watt_Sync_MessageListManage::execMsgListFile(); if (is_array($msgsignarr) && count($msgsignarr)) { //删除外部sync下的消息序列汇总文件 $result = Watt_Sync_SyncSocket::syncInterface('del', ''); if ($result != '1') { $loger->log('socket输入接口删除消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } //告诉外部删除消息序列 $result = Watt_Sync_SyncSocket::syncInterface('delmsglistsync', $msgsignarr); if ($result != '1') { $loger->log('socket输入接口删除sync目录下的消息序列文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } //将消息序列从unknown移动到outsite $result = Watt_Sync_MessageListManage::moveMsglistUnknown($msgList_execute); if ($result != '1') { $loger->log('socket输入接口将消息序列从unknown移动到outsite失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } $result = Watt_Sync_MessageListManage::execMsgList(); if ($result != '1') { $loger->log('socket输入接口执行outsite目录下的消息序列文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } } else { $loger->log('socket输入接口执行消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); exit; } //解除锁定 Watt_Sync_MessageListManage::DelLock('sinput'); }
public function ready1() { while (true) { $msg = socket_accept($this->sock); // 接受一个SOCKET if (false === $msg) { throw new Exception("socket_accept() failed: " . socket_strerror(socket_last_error($msg))); break; } $dd = parent::read(); socket_write($msg, $dd, strlen($dd)); $dd = trim(socket_read($msg, 1024)); $order_str = substr($dd, 0, 20); $order_str = strtoupper(trim($order_str)); $order_arr = split('_', $order_str); ob_start(); print "<pre>\r\n"; print_r($order_arr); print "</pre>\r\n"; $fp = fopen('testzfb/ztorder.txt', 'wb'); fwrite($fp, ob_get_contents()); fclose($fp); ob_end_clean(); if ($order_arr['0'] == 'SEND') { //写文件 $data_str = substr($dd, 20); $re = Watt_Sync_MessageListManage::createdMsgListFile($data_str, $order_arr[1]); if ($re == '1') { $writer = '1'; } else { $writer = '0'; } } else { if ($order_arr['0'] == "EXECMSGFILE") { //解析msgLIst $msgsignarr = Watt_Sync_MessageListManage::execMsgListFile(); if (is_array($msgsignarr) && count($msgsignarr)) { $writer = urlencode(serialize($msgsignarr)); } else { $writer = '0'; } } else { if ($order_arr['0'] == "MOVEMSGLIST") { //移动msgLIst $dir = $order_arr['1']; if ($dir == 'OUTSITE') { $msgsign_str = substr($dd, 20); $msgsignarr = unserialize(urldecode($msgsign_str)); // 移动msgLIst从unknown到outsite $result = Watt_Sync_MessageListManage::moveMsglistUnknown($msgsignarr); if ($result == '1') { $writer = '1'; } else { $writer = '0'; } } } else { if ($order_arr['0'] == "EXECMSGLIST") { //执行外部outsite目录下的msgLIst $result = Watt_Sync_MessageListManage::execMsgList(); if ($result == '1') { $writer = '1'; } else { $writer = '0'; } } else { if ($order_arr['0'] == "GETORDER") { //向外部发送获取消息序列的命令(在外部sync目录下创建msgListfile.msg文件存放指定数目的消息序列) $re = Watt_Sync_MessageListManage::createLocalMsgListFile(); if (!$re) { $writer = '0'; } else { $writer = $re; } } else { if ($order_arr['0'] == "GET") { //向外部获取消息序列指定块的的文件内容 $re = Watt_Sync_MessageListManage::getLocalMsgListFileCbyNum($order_arr['1'], $order_arr['2']); if (!$re) { $writer = '0'; } else { $writer = $re; } } else { if ($order_arr['0'] == "DEL") { //删除外部消息序列汇总文件 $re = Watt_Sync_MessageListManage::delLocalMsgListFile(); $writer = $re; } else { if ($order_arr['0'] == "DELMSGLIST") { //删除外部消息序列汇总文件msglist $dir = $order_arr['1']; $msgsign_str = substr($dd, 20); $msgsignarr = unserialize(urldecode($msgsign_str)); if ($dir == 'SYNC') { $re = Watt_Sync_MessageListManage::delMessageList($msgsignarr); if ($re == '1') { $writer = $re; } else { $writer = '0'; } } else { if ($dir == '') { } } $writer = $re; } else { if ($order_arr['0'] == 'QUIT') { $writer = $order_arr['0']; socket_write($msg, $writer, strlen($writer)); socket_close($msg); break; } else { if ($order_arr['0'] == 'TEST') { $str = substr($dd, 20); $writer = urldecode($str); } else { $writer = '0'; } } } } } } } } } } /* $dd = unserialize(urldecode($dd)); if (is_array($dd) && count($dd)){ //读取数组中的 if ($dd['interfacetype'] =='PassiveInput') {//被动输入 */ /*数据格式如下 Array ( [obj] => file [msgList] => Array ( [118181050416491200] => Array ( [operate] => INSERT [tableName] => tpm_xiangmu2gaojian [cols] => Array ( [XM_ID] => '75be3eaf-10a8-773b-1f74-4670b1a30499' [GJ_ID] => 'afa8d118-b811-749f-36c0-4670ff1a2141' ) [syncServerType] => INSIDE_TPM ) [118181899652933200] => Array ( [operate] => INSERT [tableName] => tpm_dingdan2gaojian [cols] => Array ( [DD_ID] => '23b3f204-1df7-65f3-aaa6-46711e610de9' [GJ_ID] => '53d3045c-b45f-ea4b-39f3-4671204d681e' ) [syncServerType] => INSIDE_TPM ) ) [msgListDir] => unknown [msgSign] => [validatePassword] => 123456 ) */ /* $result=Watt_Sync_MessageListManage::createAllMsgList($dd['msgList'],$dd['msgListDir']); //$result=Watt_Sync_MessageListManage::createAllMsgList($dd['msgList'],'outside'); if ($result=='1'){ $writer = '1'; }else { $writer = '0'; } }else if ($dd['interfacetype'] =='PassiveOutput') {//被动输出 */ /* Array('interfacetype' => 'PassiveOutput', 'validatePassword' => '123456' ); */ /*$msgAll = Watt_Sync_MessageListManage::getAllMessage(); $writer = urlencode(serialize($msgAll)); } }else { $writer = 'failed'; }*/ socket_write($msg, $writer, strlen($writer)); socket_close($msg); // $command=strtoupper("quit"); // if ($command == "QUIT") // break; } parent::close(); }