// list of packet->next from key:[{},{}] packet_t packet_get_packets(packet_t p, char *key) { int i; packet_t parr, pent, plast, pret = NULL; if(!p || !key) return NULL; parr = packet_get_packet(p, key); if(!parr || *parr->json != '[') { packet_free(parr); return NULL; } // parse each object in the array, link together for(i=0;parr->js[i];i+=2) { pent = packet_new(); packet_json(pent, parr->json+parr->js[i], parr->js[i+1]); if(!pret) pret = pent; else plast->next = pent; plast = pent; } packet_free(parr); return pret; }
void packet_print(Packet* packet) { switch (packet_get_type(packet)) { case PACKET_TYPE_SEND_MESSAGE: { printf("Send Message: Length=%d, Message=%s\n", packet_get_length(packet), packet_get_string(packet, SEND_MESSAGE_TEXT)); break; } case PACKET_TYPE_SEND_NAME: { printf("Send Name: Length=%d, Name=%s\n", packet_get_length(packet), packet_get_string(packet, SEND_NAME_NAME)); break; } case PACKET_TYPE_MOUSE_DOWN: { printf("Mouse Down: Length=%d, X=%lf, Y=%lf\n", packet_get_length(packet), packet_get_double(packet, MOUSE_DOWN_X), packet_get_double(packet, MOUSE_DOWN_Y)); break; } case PACKET_TYPE_MOUSE_MOVE: { printf("Mouse Move: Length=%d, X=%lf, Y=%lf\n", packet_get_length(packet), packet_get_double(packet, MOUSE_MOVE_X), packet_get_double(packet, MOUSE_MOVE_Y)); break; } case PACKET_TYPE_MOUSE_UP: { printf("Mouse Up: Length=%d, X=%lf, Y=%lf\n", packet_get_length(packet), packet_get_double(packet, MOUSE_UP_X), packet_get_double(packet, MOUSE_UP_Y)); break; } case PACKET_TYPE_NEW_STROKE: { printf("New Stroke: Length=%d, ID=%d, X=%lf, Y=%lf, TYPE=%d, FILL=%d, WIDTH=%lf, R=%lf, G=%lf, B=%lf\n", packet_get_length(packet), packet_get_int(packet, NEW_STROKE_ID), packet_get_double(packet, NEW_STROKE_X), packet_get_double(packet, NEW_STROKE_Y), packet_get_byte(packet, NEW_STROKE_SHAPE_TYPE), packet_get_byte(packet, NEW_STROKE_FILL), packet_get_double(packet, NEW_STROKE_WIDTH), packet_get_double(packet, NEW_STROKE_R), packet_get_double(packet, NEW_STROKE_G), packet_get_double(packet, NEW_STROKE_B)); break; } case PACKET_TYPE_ADD_POINT: { printf("Add Point: Length=%d, ID=%d, X=%lf, Y=%lf\n", packet_get_length(packet), packet_get_int(packet, ADD_POINT_ID), packet_get_double(packet, ADD_POINT_X), packet_get_double(packet, ADD_POINT_Y)); break; } case PACKET_TYPE_DELETE: { printf("New Stroke: Length=%d, ID=%d\n", packet_get_length(packet), packet_get_int(packet, DELETE_ID)); break; } case PACKET_TYPE_UPDATE: { printf("Update: Length=%d, ID=%d, X=%lf, Y=%lf, T=%lf\n", packet_get_length(packet), packet_get_int(packet, UPDATE_ID), packet_get_double(packet, UPDATE_X), packet_get_double(packet, UPDATE_Y), packet_get_double(packet, UPDATE_ROTATION)); break; } case PACKET_TYPE_PACKETS: { printf("Packets: Length=%d\n", packet_get_length(packet)); int i = 0; Packet* p = NULL; do { printf("\t"); p = packet_get_packet(packet, i); packet_print(p); i++; } while (packet_get_type(p) != PACKET_TYPE_UNDEFINED); break; } case PACKET_TYPE_NEW_CONNECTION: { printf("New Connection: Length=1\n"); break; } case PACKET_TYPE_INK_POT: { printf("Ink: %d\n", packet_get_byte(packet, INK_POT_INK)); break; } case PACKET_TYPE_UNDEFINED: default: { printf("Packet Undefined\n"); break; } } }