void dumpOSCmsg(int inSize, char* inData) { int size; char *data; if (inData[0]) { char *addr = inData; data = OSCstrskip(inData); size = inSize - (data - inData); scprintf("[ \"%s\",", addr); } else { scprintf("[ %d,", OSCint(inData)); data = inData + 4; size = inSize - 4; } sc_msg_iter msg(size, data); while (msg.remain()) { char c = msg.nextTag('i'); switch(c) { case 'i' : scprintf(" %d", msg.geti()); break; case 'f' : scprintf(" %g", msg.getf()); break; case 'd' : scprintf(" %g", msg.getd()); break; case 's' : scprintf(" \"%s\"", msg.gets()); break; case 'b' : scprintf(" DATA[%d]", msg.getbsize()); msg.skipb(); break; case '[' : scprintf("["); msg.count++; break; case ']' : scprintf("]"); msg.count++; break; default : scprintf(" !unknown tag '%c' 0x%02x !", isprint(c)?c:'?', (unsigned char)c & 255); goto leave; } if (msg.remain() && (c!= '[')) scprintf(","); } leave: scprintf(" ]"); }
jobject convertMessageToJava(JNIEnv* myEnv, char* inData, int inSize) { jclass oscMessageClass = myEnv->FindClass(OSC_MESSAGE_CLASS); if (!oscMessageClass) { scprintf("convertMessageToJava could not find the JAVA OSC representation"); return NULL; } if (inSize<=0 || !inData) { return NULL; } jmethodID oscConstructor = myEnv->GetMethodID(oscMessageClass, "<init>", "()V"); if (!oscConstructor) { scprintf("convertMessageToJava could not find a constructor for the JAVA OSC representation"); return NULL; } jobject oscObject = myEnv->NewObject(oscMessageClass, oscConstructor); jmethodID addInt = myEnv->GetMethodID(oscMessageClass, "add", "(I)Z"); jmethodID addStr = myEnv->GetMethodID(oscMessageClass, "add", "(Ljava/lang/String;)Z"); jmethodID addFlt = myEnv->GetMethodID(oscMessageClass, "add", "(F)Z"); jmethodID addLng = myEnv->GetMethodID(oscMessageClass, "add", "(J)Z"); // Did I steal this wholesale from dumpOSCmsg? Yes I did. -ajs 20100826 char * data; int size; if (inData[0]) { char *addr = inData; data = OSCstrskip(inData); size = inSize - (data - inData); jstring jaddr = myEnv->NewStringUTF(addr); myEnv->CallBooleanMethod(oscObject,addStr,jaddr); } else { myEnv->CallBooleanMethod(oscObject,addInt,OSCint(inData)); data = inData + 4; size = inSize - 4; } sc_msg_iter msg(size, data); bool ok(true); while (msg.remain() && ok) { char c = msg.nextTag('i'); jstring jstr; switch(c) { case 'i' : myEnv->CallBooleanMethod(oscObject,addInt,msg.geti()); break; case 'f' : myEnv->CallBooleanMethod(oscObject,addFlt,msg.getf()); break; case 's' : jstr = myEnv->NewStringUTF(msg.gets()); myEnv->CallBooleanMethod(oscObject,addStr,jstr); break; default : scprintf("convertMessageToJava unknown/unimplemented tag '%c' 0x%02x", isprint(c)?c:'?', (unsigned char)c & 255); ok = false; break; } } return oscObject; }
static bool dumpOSCmsg(int inSize, char* inData, bool skipStatus = false) { int size; const char *data; if (inData[0]) { const char *addr = inData; if (skipStatus) { if (strcmp(addr, "/status") == 0 || strcmp(addr, "status") == 0) // skip /status messages return false; // nothing has been printed } data = OSCstrskip(inData); size = inSize - (data - inData); scprintf("[ \"%s\",", addr); } else { scprintf("[ %d,", OSCint(inData)); data = inData + 4; size = inSize - 4; } sc_msg_iter msg(size, data); while (msg.remain()) { char c = msg.nextTag('i'); switch(c) { case 'i' : scprintf(" %d", msg.geti()); break; case 'f' : scprintf(" %g", msg.getf()); break; case 'd' : scprintf(" %g", msg.getd()); break; case 's' : scprintf(" \"%s\"", msg.gets()); break; case '[' : scprintf(" ["); msg.count ++; break; case ']' : scprintf(" ]"); msg.count ++; break; case 'b' : scprintf(" DATA[%zu]", msg.getbsize()); msg.skipb(); break; case 'm' : { char midi [4]; msg.getb (midi, 4); scprintf(" MIDI[0x%02x 0x%02x 0x%02x 0x%02x]", midi[0], midi[1], midi[2], midi[3]); break; } case 'c' : scprintf(" %c", (char)msg.geti()); break; case 't' : scprintf(" %" PRId64 "", msg.gett()); break; case 'T' : scprintf(" true"); msg.count ++; break; case 'F' : scprintf(" false"); msg.count ++; break; case 'I' : scprintf(" infinitum"); msg.count ++; break; case 'N' : scprintf(" nil"); msg.count ++; break; default : scprintf(" !unknown tag '%c' 0x%02x !", isprint(c)?c:'?', (unsigned char)c & 255); goto leave; } if (msg.remain() && (c!= '[')) scprintf(","); } leave: scprintf(" ]"); return true; // something has been printed }