23QOscMessage::QOscMessage(
const QByteArray &data)
26 qCDebug(lcTuioMessage) << data.toHex();
27 quint32 parsedBytes = 0;
30 QByteArray addressPattern;
31 if (!qt_readOscString(data, addressPattern, parsedBytes) || addressPattern.size() == 0)
35 QByteArray typeTagString;
36 if (!qt_readOscString(data, typeTagString, parsedBytes))
45 if (typeTagString.size() == 0 || typeTagString.at(0) !=
',')
48 QList<QVariant> arguments;
51 for (
int i = 1; i < typeTagString.size(); ++i) {
52 char typeTag = typeTagString.at(i);
55 if (!qt_readOscString(data, aString, parsedBytes))
57 arguments.append(aString);
58 }
else if (typeTag ==
'i') {
59 if (parsedBytes > (quint32)data.size() || data.size() - parsedBytes < qsizetype(
sizeof(quint32)))
62 quint32 anInt = qFromBigEndian<quint32>(data.constData() + parsedBytes);
63 parsedBytes +=
sizeof(quint32);
66 arguments.append((
int)anInt);
67 }
else if (typeTag ==
'f') {
68 if (parsedBytes > (quint32)data.size() || data.size() - parsedBytes < qsizetype(
sizeof(quint32)))
71 static_assert(
sizeof(
float) ==
sizeof(quint32));
76 value.u = qFromBigEndian<quint32>(data.constData() + parsedBytes);
77 parsedBytes +=
sizeof(quint32);
78 arguments.append(value.f);
80 qCWarning(lcTuioMessage) <<
"Reading argument of unknown type " << typeTag;
86 m_addressPattern = addressPattern;
87 m_arguments = arguments;
89 qCDebug(lcTuioMessage) <<
"Message with address pattern: " << addressPattern <<
" arguments: " << arguments;