/** * Convert a byte array into an OSCPacket (either an OSCMessage or OSCBundle). * @return an OSCPacket */ OSCPacket& OSCByteArrayToMsgConverter::convert(QByteArray* byteArray, qint32 btLength) { iBytes = byteArray; iBytesLength = btLength; iStreamPosition = 0; if(isBundle()) return convertBundle(); else return convertMessage(); }
//------------------------------------------------------------------------------ void OpenSoundBundle::addElement(OpenSoundBase *entry, bool deleteWhenUsed) { int32 size; size = entry->getSize(); if(isBundle(entry->getData(), size)) { bundleArray.push_back(static_cast<OpenSoundBundle *>(entry)); bundleShouldBeDeleted.push_back(deleteWhenUsed); } else if(OpenSoundMessage::isMessage(entry->getData(), size)) { messageArray.push_back(static_cast<OpenSoundMessage *>(entry)); messageShouldBeDeleted.push_back(deleteWhenUsed); } }
//------------------------------------------------------------------------------ OpenSoundBundle::OpenSoundBundle (char *data, const int size) : OpenSoundBase(), bufferSize(0), outgoingSize(0), dataBuffer(0) { int i; int32 tempSize; TimeTag *tempTag; OpenSoundMessage *newMessage; OpenSoundBundle *newBundle; //Start at 8, because we don't care about the first '#bundle' string. for (i = 8; i < size; ++i) { if (i < 16) { //Get timeTag. tempTag = new TimeTag(data+i); timeTag = *tempTag; delete tempTag; i += 7; } else { tempSize = ntohl(*(reinterpret_cast<int32 *>(data+i))); i += 4; if(isBundle((data+i), tempSize)) { newBundle = new OpenSoundBundle((data+i), tempSize); addElement(newBundle); i += (tempSize-1); //-1 because it gets incremented at the end of the loop. } else if(OpenSoundMessage::isMessage((data+i), tempSize)) { newMessage = new OpenSoundMessage((data+i), tempSize); addElement(newMessage); i += (tempSize-1); //-1 because it gets incremented at the end of the loop. } } } }