History

OSCSocket.sendPacket takes varargs instead of array

Ada committed 10 months ago

Commit 08ce6271 parent a88e62b3 files · +37 −25Browse files

Showing the changes to interface/src/scripting/OSCScriptingInterface.cpp (1 of 3 files). Show all

Unified · Split

interface/src/scripting/OSCScriptingInterface.cpp+28−21
@@ -14,7 +14,9 @@ · 13 unmodified lines
1414 #include <QtEndian>
1515 #include <QNetworkDatagram>
1616
17+#include "ScriptContext.h"
1718 #include "ScriptEngine.h"
19+#include "ScriptValue.h"
1820 #include "OSCScriptingInterface.h"
1921
2022
@@ -179,26 +181,29 @@ void OSCScriptingInterface::readPacket() { · 158 unmodified lines
179181 emit packetReceived(addr, args);
180182 }
181183
182−void OSCScriptingInterface::sendPacket(const QString& address, const QVariantList& arguments) {
183− Q_ASSERT(_socket);
184+ScriptValue OSCScriptingInterface::sendPacket(ScriptContext* context, ScriptEngine* engine) {
185+ auto instance = DependencyManager::get<OSCScriptingInterface>();
184186
185− // FIXME: how do you get the script engine???
186− struct HackRemoveThis {
187− void raiseException(QString msg) {
188− qCCritical(osc_cat) << msg;
189− }
190− };
187+ if (context->argumentCount() == 0) {
188+ engine->raiseException("Address is required");
189+ return engine->undefinedValue();
190+ }
191+
192+ auto address = context->argument(0).toString();
193+ QVariantList arguments;
191194
192− auto scriptEngine = std::make_unique<HackRemoveThis>(); //_scriptManager->engine();
195+ for (int i = 1; i < context->argumentCount(); i++) {
196+ arguments.append(context->argument(i).toVariant());
197+ }
193198
194199 if (address.length() < 2 || !address.startsWith('/') || address.endsWith('/')) {
195− scriptEngine->raiseException("address must be at least two characters and start with '/'");
196− return;
200+ engine->raiseException("Address must be at least two characters and start with '/'");
201+ return engine->undefinedValue();
197202 }
198203
199204 if (auto match = invalidCharacters.match(address); match.hasMatch()) {
200− scriptEngine->raiseException(QString("address contains invalid character '%1'").arg(match.captured()));
201− return;
205+ engine->raiseException(QString("Address contains invalid character '%1'").arg(match.captured()));
206+ return engine->undefinedValue();
202207 }
203208
204209 auto pad4 = [](QByteArray& array) {
@@ -226,8 +231,8 @@ void OSCScriptingInterface::sendPacket(const QString& address, const QVariantLis · 21 unmodified lines
226231 auto map = arg.toMap();
227232 auto typeName = map.value("type").toString();
228233 if (!typeNameMap.contains(typeName[0])) {
229− scriptEngine->raiseException(QString("Unknown type '%c' on argument %d").arg(typeName).arg(i));
230− return;
234+ engine->raiseException(QString("Unknown type '%c' on argument %d").arg(typeName).arg(i));
235+ return engine->undefinedValue();
231236 }
232237 expectedType = typeNameMap[typeName[0]];
233238 value = map.value("value");
@@ -268,8 +273,8 @@ void OSCScriptingInterface::sendPacket(const QString& address, const QVariantLis · 34 unmodified lines
268273 auto stringArg = value.toString();
269274
270275 if (stringArg.contains(QChar(0))) {
271− scriptEngine->raiseException("String contains null (0x00) character");
272− return;
276+ engine->raiseException("String contains null (0x00) character");
277+ return engine->undefinedValue();
273278 }
274279
275280 bodyBytes.append(stringArg.toUtf8());
@@ -301,8 +306,8 @@ void OSCScriptingInterface::sendPacket(const QString& address, const QVariantLis · 25 unmodified lines
301306 break;
302307
303308 default:
304− scriptEngine->raiseException(QString("Unserializable type %1").arg(value.typeName()));
305− return;
309+ engine->raiseException(QString("Unserializable type %1").arg(value.typeName()));
310+ return engine->undefinedValue();
306311 }
307312 }
308313
@@ -313,7 +318,9 @@ void OSCScriptingInterface::sendPacket(const QString& address, const QVariantLis · 4 unmodified lines
313318 // pack the header + body data together for the datagram
314319 bytes.append(bodyBytes);
315320
316− _socket->writeDatagram(bytes, QHostAddress(_sendHost.get()), _sendPort.get());
321+ instance->_socket->writeDatagram(bytes, QHostAddress(instance->_sendHost.get()), instance->_sendPort.get());
322+
323+ qCDebug(osc_cat) << QHostAddress(instance->_sendHost.get()) << instance->_sendPort.get() << ":" << bytes.toHex(' ');
317324
318− qCDebug(osc_cat) << QHostAddress(_sendHost.get()) << _sendPort.get() << ":" << bytes.toHex(' ');
325+ return engine->undefinedValue();
319326 }