Exemplo n.º 1
0
 /**
  * 将一个数组打包成一个Key/Value的消息体
  *
  * @param array $msg
  * @return string
  */
 public static function toPack($msg)
 {
     $content = null;
     if (is_array($msg) == true) {
         foreach ($msg as $key => $value) {
             //这里是个约定,当value为null时,抛弃key.
             //因此,需要一个空key时候,请将value设置空字符串
             if ($value === null) {
                 continue;
             }
             //对value是数组的情况进行处理
             if (is_array($value) == true) {
                 $value = self::toPack($value);
                 $keyvalue_len = strlen($key) + strlen($value) + 2 + 6;
                 $keyvalue_len = $keyvalue_len | 0x80000000;
             } else {
                 $keyvalue_len = strlen($key) + strlen($value) + 2 + 6;
             }
             $content .= pack("Nn", $keyvalue_len, strlen($key)) . $key . "" . $value . "";
         }
         return $content;
     } else {
         if (is_null($msg) == true) {
             return $content;
         } else {
             self::$errno = ERR_PACKAGE_PACK_BAD_PARAM_TYPE;
             self::$error = '参数应该是null或数组';
             return false;
         }
     }
 }
Exemplo n.º 2
0
 /**
 * 打包recv_data
 *
 * @param int $taskId
 s	 * @param string $data
 * @param integer $group
 * @param string $user
 * @param string $passwd
 * @param string $sign
 * @param boolean $zip
 * @return string
 */
 function packRecvData($taskId, $data, $group = null, $user = null, $passwd = null, $sign = null, $zip = null)
 {
     $dataArr = array();
     $dataArr[CWX_MQ_DATA] = $data;
     $dataArr[CWX_MQ_GROUP] = $group;
     $dataArr[CWX_MQ_USER] = $user;
     $dataArr[CWX_MQ_PASSWD] = $passwd;
     $kvPackage = CwxPackage::toPack($dataArr);
     //签名
     if ($sign == CWX_MQ_CRC32) {
         $crc32 = crc32($kvPackage);
         $crc32 = pack('L', $crc32);
         $dataArr = array();
         $dataArr[CWX_MQ_CRC32] = $crc32;
         $kvPackage .= CwxPackage::toPack($dataArr);
     } else {
         if ($sign == CWX_MQ_MD5) {
             $md5 = md5($kvPackage, true);
             $dataArr = array();
             $dataArr[CWX_MQ_MD5] = $md5;
             $kvPackage .= CwxPackage::toPack($dataArr);
         }
     }
     //压缩
     if ($zip == true) {
         $kvPackage = gzcompress($kvPackage);
         $header = new CwxMsgHead(MSG_TYPE_RECV_DATA, strlen($kvPackage), $taskId, 2, $this->version);
     } else {
         $header = new CwxMsgHead(MSG_TYPE_RECV_DATA, strlen($kvPackage), $taskId, null, $this->version);
     }
     //打包
     $result = $header->toNet() . $kvPackage;
     return $result;
 }