summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/QueuedEngineInterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/engine/QueuedEngineInterface.cpp')
-rw-r--r--src/libs/engine/QueuedEngineInterface.cpp33
1 files changed, 15 insertions, 18 deletions
diff --git a/src/libs/engine/QueuedEngineInterface.cpp b/src/libs/engine/QueuedEngineInterface.cpp
index a27a55f5..511246da 100644
--- a/src/libs/engine/QueuedEngineInterface.cpp
+++ b/src/libs/engine/QueuedEngineInterface.cpp
@@ -26,7 +26,7 @@ namespace Ingen {
QueuedEngineInterface::QueuedEngineInterface(Engine& engine, size_t queued_size, size_t stamped_size)
: QueuedEventSource(queued_size, stamped_size)
- , _responder(SharedPtr<Shared::Responder>(new Shared::Responder())) // NULL responder
+ , _responder(new Responder(NULL, 0))
, _engine(engine)
{
}
@@ -41,18 +41,6 @@ QueuedEngineInterface::now() const
}
-/** Set the Responder to send responses to commands with, once the commands
- * are preprocessed and ready to be executed (or not).
- *
- * Ownership of @a responder is taken.
- */
-void
-QueuedEngineInterface::set_responder(SharedPtr<Shared::Responder> responder)
-{
- _responder = responder;
-}
-
-
void
QueuedEngineInterface::set_next_response_id(int32_t id)
{
@@ -64,9 +52,8 @@ QueuedEngineInterface::set_next_response_id(int32_t id)
void
QueuedEngineInterface::disable_responses()
{
- static SharedPtr<Shared::Responder> null_responder(new Shared::Responder());
- //cerr << "DISABLE\n";
- set_responder(null_responder);
+ _responder->set_client(NULL);
+ _responder->set_id(0);
}
@@ -74,9 +61,15 @@ QueuedEngineInterface::disable_responses()
void
-QueuedEngineInterface::register_client(const string& uri, ClientInterface* client)
+QueuedEngineInterface::register_client(ClientInterface* client)
{
- push_queued(new RegisterClientEvent(_engine, _responder, now(), uri, client));
+ push_queued(new RegisterClientEvent(_engine, _responder, now(), client->uri(), client));
+ if (!_responder) {
+ _responder = SharedPtr<Responder>(new Responder(client, 1));
+ } else {
+ _responder->set_id(1);
+ _responder->set_client(client);
+ }
}
@@ -84,6 +77,10 @@ void
QueuedEngineInterface::unregister_client(const string& uri)
{
push_queued(new UnregisterClientEvent(_engine, _responder, now(), uri));
+ if (_responder && _responder->client() && _responder->client()->uri() == uri) {
+ _responder->set_id(0);
+ _responder->set_client(NULL);
+ }
}