Example #1
0
void monitor_init(void)
{
  struct sockaddr_in addr;
  socklen_t len;

  sbuf = msgpack_sbuffer_new();
  draw_sbuf = msgpack_sbuffer_new();
  up = msgpack_unpacker_new(MONITOR_BUF_SIZE);

  /* TCP socket */
  sock_listen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

  addr.sin_family = AF_INET;
  addr.sin_port = htons(MONITOR_PORT);
  addr.sin_addr.s_addr = htonl(INADDR_ANY);
  bind(sock_listen, (struct sockaddr *)&addr, sizeof(addr));

  printf("[System] Waiting monitor connection... \n");
  listen(sock_listen, 1);

  len = sizeof(addr_client);
  sock = accept(sock_listen, (struct sockaddr *)&addr_client, &len);

  printf("[System] Monitor connected %s\n", inet_ntoa(addr_client.sin_addr));
}
Example #2
0
void unpack(receiver* r) {
    /* buf is allocated by unpacker. */
    msgpack_unpacker* unp = msgpack_unpacker_new(100);
    msgpack_unpacked result;
    msgpack_unpack_return ret;
    size_t recv_len;
    int recv_count = 0;
    int i = 0;

    msgpack_unpacked_init(&result);
    while (true) {
        recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp);
        if (recv_len == 0) break; // (reached end of input)
        printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len);
        ret = msgpack_unpacker_next(unp, &result);
        while (ret == MSGPACK_UNPACK_SUCCESS) {
            msgpack_object obj = result.data;

            /* Use obj. */
            printf("Object no %d:\n", ++i);
            msgpack_object_print(stdout, obj);
            printf("\n");
            /* If you want to allocate something on the zone, you can use zone. */
            /* msgpack_zone* zone = result.zone; */
            /* The lifetime of the obj and the zone,  */

            ret = msgpack_unpacker_next(unp, &result);
        }
        if (ret == MSGPACK_UNPACK_PARSE_ERROR) {
            printf("The data in the buf is invalid format.\n");
            msgpack_unpacked_destroy(&result);
            return;
        }
    }
    msgpack_unpacked_destroy(&result);
    msgpack_unpacker_free(unp);
}