mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-05-29 23:42:40 +02:00
refactor example/c/lib_buffer_unpack.c
The example has some duplicated code that somewhat distracts from the main processing loop. I think placing this into a separate function improves readability of the code.
This commit is contained in:
parent
767099a0eb
commit
4e65bc35ed
@ -41,6 +41,19 @@ size_t receiver_recv(receiver *r, char* buf, size_t try_size) {
|
|||||||
return actual_size;
|
return actual_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t receiver_to_unpacker(receiver* r, size_t request_size,
|
||||||
|
msgpack_unpacker *unpacker)
|
||||||
|
{
|
||||||
|
// make sure there's enough room, or expand the unpacker accordingly
|
||||||
|
if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) {
|
||||||
|
assert(msgpack_unpacker_reserve_buffer(unpacker, request_size));
|
||||||
|
}
|
||||||
|
size_t recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker),
|
||||||
|
request_size);
|
||||||
|
msgpack_unpacker_buffer_consumed(unpacker, recv_len);
|
||||||
|
return recv_len;
|
||||||
|
}
|
||||||
|
|
||||||
#define EACH_RECV_SIZE 4
|
#define EACH_RECV_SIZE 4
|
||||||
|
|
||||||
void unpack(receiver* r) {
|
void unpack(receiver* r) {
|
||||||
@ -54,17 +67,9 @@ void unpack(receiver* r) {
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
msgpack_unpacked_init(&result);
|
msgpack_unpacked_init(&result);
|
||||||
if (msgpack_unpacker_buffer_capacity(unp) < EACH_RECV_SIZE) {
|
|
||||||
bool expanded = msgpack_unpacker_reserve_buffer(unp, 100);
|
|
||||||
assert(expanded);
|
|
||||||
}
|
|
||||||
buf = msgpack_unpacker_buffer(unp);
|
|
||||||
|
|
||||||
recv_len = receiver_recv(r, buf, EACH_RECV_SIZE);
|
recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp);
|
||||||
msgpack_unpacker_buffer_consumed(unp, recv_len);
|
while (recv_len > 0) {
|
||||||
|
|
||||||
|
|
||||||
while (recv_len > 0) {
|
|
||||||
printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len);
|
printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len);
|
||||||
ret = msgpack_unpacker_next(unp, &result);
|
ret = msgpack_unpacker_next(unp, &result);
|
||||||
while (ret == MSGPACK_UNPACK_SUCCESS) {
|
while (ret == MSGPACK_UNPACK_SUCCESS) {
|
||||||
@ -85,13 +90,7 @@ void unpack(receiver* r) {
|
|||||||
msgpack_unpacked_destroy(&result);
|
msgpack_unpacked_destroy(&result);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (msgpack_unpacker_buffer_capacity(unp) < EACH_RECV_SIZE) {
|
recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp);
|
||||||
bool expanded = msgpack_unpacker_reserve_buffer(unp, 100);
|
|
||||||
assert(expanded);
|
|
||||||
}
|
|
||||||
buf = msgpack_unpacker_buffer(unp);
|
|
||||||
recv_len = receiver_recv(r, buf, 4);
|
|
||||||
msgpack_unpacker_buffer_consumed(unp, recv_len);
|
|
||||||
}
|
}
|
||||||
msgpack_unpacked_destroy(&result);
|
msgpack_unpacked_destroy(&result);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user