From 73eb8260e49e2be3b73cac2e85b701defc4bc89f Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 10 May 2013 19:15:18 +0100 Subject: [PATCH] More NSM fixes --- source/backend/CarlaStandalone.hpp | 5 +++++ source/backend/standalone/CarlaStandalone.cpp | 22 ++++++++++++++++--- source/carla.py | 5 ++++- source/carla_backend.py | 6 +++++ 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/source/backend/CarlaStandalone.hpp b/source/backend/CarlaStandalone.hpp index b5d5d9966..a57d9cdfd 100644 --- a/source/backend/CarlaStandalone.hpp +++ b/source/backend/CarlaStandalone.hpp @@ -694,6 +694,11 @@ CARLA_EXPORT const char* carla_get_host_osc_url_udp(); */ CARLA_EXPORT void carla_nsm_announce(const char* url, const char* appName, int pid); +/*! + * Ready for handling NSM messages. + */ +CARLA_EXPORT void carla_nsm_ready(); + /*! * Reply to NSM open message. * \see CALLBACK_NSM_OPEN diff --git a/source/backend/standalone/CarlaStandalone.cpp b/source/backend/standalone/CarlaStandalone.cpp index f8880d776..c71074108 100644 --- a/source/backend/standalone/CarlaStandalone.cpp +++ b/source/backend/standalone/CarlaStandalone.cpp @@ -2124,6 +2124,7 @@ public: CarlaNSM() : fServerThread(nullptr), fReplyAddr(nullptr), + fIsReady(false), fIsOpened(false), fIsSaved(false) { @@ -2173,6 +2174,11 @@ public: lo_address_free(addr); } + void ready() + { + fIsReady = true; + } + void replyOpen() { fIsOpened = true; @@ -2233,10 +2239,12 @@ protected: std::strcat(data, ":"); std::strcat(data, clientId); - // wait max 6 secs for engine to start - for (int i=0; i < 60 && standalone.engine == nullptr; ++i) + // wait max 6 secs for host to init + for (int i=0; i < 60 && ! fIsReady; ++i) carla_msleep(100); + fIsOpened = false; + standalone.callback(nullptr, CarlaBackend::CALLBACK_NSM_OPEN, 0, 0, 0, 0.0f, data); // wait max 10 secs to open @@ -2270,10 +2278,12 @@ protected: if (fReplyAddr == nullptr) return 1; + fIsSaved = false; + standalone.callback(nullptr, CarlaBackend::CALLBACK_NSM_SAVE, 0, 0, 0, 0.0f, nullptr); // wait max 10 secs to save - for (int i=0; i < 100 && ! fIsOpened; ++i) + for (int i=0; i < 100 && ! fIsSaved; ++i) carla_msleep(100); #ifndef BUILD_ANSI_TEST @@ -2297,6 +2307,7 @@ private: lo_server_thread fServerThread; lo_address fReplyAddr; + bool fIsReady; // used to startup, only once bool fIsOpened; bool fIsSaved; @@ -2332,6 +2343,11 @@ void carla_nsm_announce(const char* url, const char* appName, int pid) gCarlaNSM.announce(url, appName, pid); } +void carla_nsm_ready() +{ + gCarlaNSM.ready(); +} + void carla_nsm_reply_open() { gCarlaNSM.replyOpen(); diff --git a/source/carla.py b/source/carla.py index 605b8fa26..53f8cbd1a 100755 --- a/source/carla.py +++ b/source/carla.py @@ -891,7 +891,10 @@ class CarlaMainW(QMainWindow): self.setProperWindowTitle() - QTimer.singleShot(0, self, SLOT("slot_engineStart()")) + if NSM_URL: + Carla.host.nsm_ready() + else: + QTimer.singleShot(0, self, SLOT("slot_engineStart()")) def startEngine(self): # --------------------------------------------- diff --git a/source/carla_backend.py b/source/carla_backend.py index ed3c32b13..ee7f5b4b7 100644 --- a/source/carla_backend.py +++ b/source/carla_backend.py @@ -639,6 +639,9 @@ class Host(object): self.lib.carla_nsm_announce.argtypes = [c_char_p, c_char_p, c_int] self.lib.carla_nsm_announce.restype = None + self.lib.carla_nsm_ready.argtypes = None + self.lib.carla_nsm_ready.restype = None + self.lib.carla_nsm_reply_open.argtypes = None self.lib.carla_nsm_reply_open.restype = None @@ -898,6 +901,9 @@ class Host(object): def nsm_announce(self, url, appName_, pid): self.lib.carla_nsm_announce(url.encode("utf-8"), appName_.encode("utf-8"), pid) + def nsm_ready(self): + self.lib.carla_nsm_ready() + def nsm_reply_open(self): self.lib.carla_nsm_reply_open()