+ static char eventBuffer[1024];\r
+ MatrixClientGetRoomEvent(&client,\r
+ ROOM_ID,\r
+ EVENT_ID,\r
+ eventBuffer, 1024);\r
+ \r
+ printf("event: %s\n", eventBuffer);\r
+\r
+\r
+ while (getchar() != 'q') {\r
+ static char nextBatch[1024];\r
+\r
+ static char syncBuffer[1024*50];\r
+ MatrixClientSync(&client, syncBuffer, 1024*50, nextBatch);\r
+ \r
+ int res;\r
+\r
+ const char * s = syncBuffer;\r
+ int slen = strlen(syncBuffer);\r
+ \r
+ {\r
+ int koff, klen, voff, vlen, vtype, off = 0;\r
+ for (off = 0; (off = mjson_next(s, slen, off, &koff, &klen,\r
+ &voff, &vlen, &vtype)) != 0; ) {\r
+ const char * key = s + koff;\r
+ const char * val = s + voff;\r
+\r
+ printf("%.*s: %.100s\n", klen, key, val);\r
+ }\r
+ }\r
+\r
+ mjson_get_string(s, slen, "$.next_batch", nextBatch, 1024);\r
+\r
+ const char * events;\r
+ int eventsLen;\r
+ res =\r
+ mjson_find(s, slen, "$.to_device.events", &events, &eventsLen);\r
+ \r
+ if (res != MJSON_TOK_INVALID) {\r
+ {\r
+ int koff, klen, voff, vlen, vtype, off = 0;\r
+ for (off = 0; (off = mjson_next(events, eventsLen, off, &koff, &klen,\r
+ &voff, &vlen, &vtype)) != 0; ) {\r
+ const char * val = events + voff;\r
+\r
+ printf("%.*s\n", vlen, val);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r