Exemple #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;
}
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);
}