예제 #1
0
파일: Sync.php 프로젝트: uwitec/outbuying
 /**
  * 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');
 }
예제 #2
0
 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();
 }