function packMsg($msgType, $taskId, $msg) { $version = 1; $header = new CwxMsgHead($msgType, strlen($msg), $taskId, 0, $version); $result = $header->toNet() . $msg; return $result; }
/** * 接收消息体 * * @param package $package * @return string or boolean */ public function receiveMsg() { $socket = $this->sock; if ($socket == null) { $this->errno = ERR_REQUEST_NULL_SOCKET; $this->error = '连接不存在,请检查连接是否正常'; return false; } $rdata = socket_read($socket, 14, PHP_BINARY_READ); $n = strlen($rdata); if ($n == 14) { $header = new CwxMsgHead(); $ret = $header->fromNet($rdata); if ($ret == true) { $dataLen = $header->getDataLen(); $rdata = null; $n = 0; while ($n < $dataLen) { $rt = socket_read($socket, $dataLen - $n, PHP_BINARY_READ); $rdata .= $rt; $n = $n + strlen($rt); } if ($n == $dataLen) { //处理压缩的消息,进行解压缩操作 if (($header->getAttr() & 2) == true) { $rdata = gzuncompress($rdata); } return $rdata; } else { $this->errno = ERR_REQUEST_RECEIVE_BAD_MSG; $this->error = '获取消息体失败 返回数据长度错误'; return false; } } else { $this->errno = $header->getLastErrno(); $this->error = $header->getLastError(); return false; } } else { $this->errno = ERR_REQUEST_RECEIVE_BAD_MSG_HEADR; $this->error = '获取消息头失败 返回数据长度错误'; return false; } }
/** * 打包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; }