예제 #1
0
int main()
{
	char buf[8192], tmp[8192];
	mc_pack_t *mc=(mc_pack_t *)malloc(8192);
	mc_pack_t *p;
	int ret;
	p=mc_pack_create(buf, sizeof(buf));
	if(MC_PACK_PTR_ERR(p)){
		puts("faint");
		return -1;
	}
	ret=mc_pack_putf(p, "cmd:%s", "SET");
	mc_pack_close(p);
	printf("%d\n",mc_pack_get_size(p));
	memcpy(mc, p, mc_pack_get_size(p));
	mc_pack_pack2str(mc, tmp, sizeof(tmp));
	printf("%s\n", tmp);
	return 0;
}
예제 #2
0
static int pack_data(char* dest_buf, int dest_buf_len, int post_count, const delpost_record_t* records)
{
	const int TMP_BUF_SIZE = 1024 * 1024;
	char tmp_buffer[TMP_BUF_SIZE];
	
	mc_pack_t* res_pack = mc_pack_open_w(1, dest_buf, dest_buf_len, tmp_buffer, sizeof (tmp_buffer));
	if(MC_PACK_PTR_ERR(res_pack) != 0)
	{
		UB_LOG_WARNING("mc_pack_create error");
		return -1;
	}

	int ret = 0;

	ret = mc_pack_put_int32(res_pack, "post_count", post_count);
	if (ret != 0)
	{
		UB_LOG_WARNING("post_count[ret=%d, post_count=%d] put error.", ret, post_count);
		return -1;
	}

	mc_pack_t* res_array = mc_pack_put_array(res_pack, "del_post_info");
	if (res_array == NULL || MC_PACK_PTR_ERR(res_array) != 0)
	{
		UB_LOG_WARNING("mc_pack_put_array del_post_info[ret=%p, MC_PACK_PTR_ERR=%d] error", res_array, MC_PACK_PTR_ERR(res_array));
		return -1;
	}

	for (int i = 0; i < post_count; i++)
	{
		mc_pack_t* obj = mc_pack_put_object(res_array, NULL);
		if (obj == NULL || MC_PACK_PTR_ERR(obj) != 0)
		{
			UB_LOG_WARNING("mc_pack_put_object res_array[ret=%p, MC_PACK_PTR_ERR=%d] error", obj, MC_PACK_PTR_ERR(obj));
			return -1;
		}

		int r = 0;
		r = mc_pack_put_uint64(obj, "post_id", (mc_uint64_t)records[i].post_id);
		if (r != 0)
		{
			UB_LOG_WARNING("mc_pack_put_uint64 post_id[pid=%lu, ret=%d] error", records[i].post_id, r);
			return -1;
		}

		r = mc_pack_put_nstr(obj, "user_name", records[i].username, strlen(records[i].username) + 1);
		if (r != 0)
		{
			UB_LOG_WARNING("mc_pack_put_uint64 user_name[username=%s, ret=%d] error", records[i].username, r);
			return -1;
		}

		r = mc_pack_put_uint32(obj, "del_time", records[i].del_time);
		if (r != 0)
		{
			UB_LOG_WARNING("mc_pack_put_uint64 del_time[del_time=%u, ret=%d] error", records[i].del_time, r);
			return -1;
		}
	}

	mc_pack_close(res_pack);

	return mc_pack_get_size(res_pack);
}
예제 #3
0
int cmmsearch_query_handle_t::parse_query(const pointer_t query_cmd,
                                        ts_buffer_t &req_detail,
                                        basic_req_info *basic_info,
                                        vector < ts_terminfo_t > &term_list)
{
    int opret = 0;
    nshead_t *req_nshead = (nshead_t *) query_cmd;

	bsl::ResourcePool rp;
	req_detail.reset();
	mc_pack_t *req_mc = mc_pack_open_w_rp(2, req_detail._buf, req_detail._size, &rp);
	if(MC_PACK_PTR_ERR(req_mc)){
        UB_LOG_WARNING("[function:parse_query>>mc_pack_open_w_rp][ret:][desc:mc_pack_open_w_rp error][intput:]");
        return -2;
    }

    opret = mc_pack_json2pack((char *)(req_nshead+1), req_mc);
    if(opret<0){
        UB_LOG_WARNING("[function:parse_query>>mc_pack_json2pack][ret:][desc:mc_pack_json2pack error][intput:]");
        return -2;
    }
    //cmd
    snprintf(basic_info->cmd_str, TS_CMDSTR_MAXLEN, "%s",  mc_pack_get_str(req_mc, "cmd"));
    if(MC_PACK_PTR_ERR(basic_info->cmd_str))
    {
        return -2;
    }


    //page_no
    opret= mc_pack_get_uint32(req_mc, "page_no", &basic_info->page_no);
    if(opret < 0)
    {
        return -2;
    }
    //num_per_page
    opret= mc_pack_get_uint32(req_mc, "num_per_page", &basic_info->num_per_page );
    if(opret < 0)
    {
        return -2;
    }

    //term_list
    const char *keyword = mc_pack_get_str(req_mc, "query");
    if(MC_PACK_PTR_ERR(keyword))
    {
        return -2;
    }

    const char delimiters[] = " .,;:!-";
    char *running;
    char *token;
    running = strdup(keyword);
    ts_terminfo_t terminfo;
    token = strsep(&running, delimiters);
    while(NULL != token)
    {
        creat_sign_fs64(token, strlen(token), &terminfo.term.sign1,
                        &terminfo.term.sign2);
        term_list.push_back(terminfo);
        UB_LOG_DEBUG("qterm[%s] [%u:%u]",token, terminfo.term.sign1,
                     terminfo.term.sign2);
        token = strsep(&running, delimiters);
    }
	if (running)
		free(running);

    mc_pack_close(req_mc);
    return 0;
}