diff options
-rw-r--r-- | include/ingen/shared/World.hpp | 2 | ||||
-rw-r--r-- | src/http/HTTPClientReceiver.cpp | 26 | ||||
-rw-r--r-- | src/http/HTTPClientReceiver.hpp | 7 | ||||
-rw-r--r-- | src/http/HTTPEngineSender.cpp | 14 | ||||
-rw-r--r-- | src/http/HTTPEngineSender.hpp | 2 | ||||
-rw-r--r-- | src/ingen/main.cpp | 6 | ||||
-rw-r--r-- | src/shared/World.cpp | 3 |
7 files changed, 26 insertions, 34 deletions
diff --git a/include/ingen/shared/World.hpp b/include/ingen/shared/World.hpp index 4ee378c6..e35b9248 100644 --- a/include/ingen/shared/World.hpp +++ b/include/ingen/shared/World.hpp @@ -84,14 +84,12 @@ public: virtual void set_serialiser(SharedPtr<Serialisation::Serialiser> s); virtual void set_parser(SharedPtr<Serialisation::Parser> p); virtual void set_store(SharedPtr<Store> s); - virtual void set_client(SharedPtr<ClientInterface> c); virtual SharedPtr<EngineBase> local_engine(); virtual SharedPtr<ServerInterface> engine(); virtual SharedPtr<Serialisation::Serialiser> serialiser(); virtual SharedPtr<Serialisation::Parser> parser(); virtual SharedPtr<Store> store(); - virtual SharedPtr<ClientInterface> client(); virtual Sord::World* rdf_world(); diff --git a/src/http/HTTPClientReceiver.cpp b/src/http/HTTPClientReceiver.cpp index 0ec5aaa4..dc1235e7 100644 --- a/src/http/HTTPClientReceiver.cpp +++ b/src/http/HTTPClientReceiver.cpp @@ -38,9 +38,6 @@ using namespace Serialisation; namespace Client { -static SoupSession* client_session = NULL; -static HTTPClientReceiver* client_receiver = NULL; - HTTPClientReceiver::HTTPClientReceiver( Shared::World* world, const std::string& url, @@ -49,15 +46,14 @@ HTTPClientReceiver::HTTPClientReceiver( , _world(world) , _url(url) { + _client_session = soup_session_sync_new(); start(false); - client_receiver = this; + assert(_client_session); } HTTPClientReceiver::~HTTPClientReceiver() { stop(); - if (client_receiver == this) - client_receiver = NULL; } HTTPClientReceiver::Listener::Listener(HTTPClientReceiver* receiver, const std::string& uri) @@ -106,21 +102,17 @@ HTTPClientReceiver::Listener::~Listener() void HTTPClientReceiver::send(SoupMessage* msg) { - if (!client_session) { - LOG(debug) << "Starting session" << endl; - client_session = soup_session_sync_new(); - } - + assert(SOUP_IS_SESSION(_client_session)); assert(SOUP_IS_MESSAGE(msg)); - soup_session_queue_message(client_session, msg, message_callback, client_receiver); + soup_session_queue_message(_client_session, msg, message_callback, this); } void HTTPClientReceiver::close_session() { - if (client_session) { - SoupSession* s = client_session; - client_session = NULL; + if (_client_session) { + SoupSession* s = _client_session; + _client_session = NULL; soup_session_abort(s); } } @@ -196,7 +188,7 @@ HTTPClientReceiver::message_callback(SoupSession* session, SoupMessage* msg, voi me->_world, me->_target.get(), Glib::ustring(msg->response_body->data), - path); + ""); } } else if (path == "/stream") { @@ -226,7 +218,7 @@ HTTPClientReceiver::start(bool dump) SoupMessage* msg = soup_message_new("GET", (_url + "/stream").c_str()); assert(SOUP_IS_MESSAGE(msg)); - soup_session_queue_message(client_session, msg, message_callback, this); + soup_session_queue_message(_client_session, msg, message_callback, this); } void diff --git a/src/http/HTTPClientReceiver.hpp b/src/http/HTTPClientReceiver.hpp index d7165c81..39407eba 100644 --- a/src/http/HTTPClientReceiver.hpp +++ b/src/http/HTTPClientReceiver.hpp @@ -45,17 +45,17 @@ public: ~HTTPClientReceiver(); - static void send(SoupMessage* msg); - static void close_session(); + void send(SoupMessage* msg); + void close_session(); std::string uri() const { return _url; } void start(bool dump); void stop(); -private: static void message_callback(SoupSession* session, SoupMessage* msg, void* ptr); +private: void update(const std::string& str); class Listener : public Raul::Thread { @@ -76,6 +76,7 @@ private: SharedPtr<ClientInterface> _target; Shared::World* _world; const std::string _url; + SoupSession* _client_session; bool _quit_flag; }; diff --git a/src/http/HTTPEngineSender.cpp b/src/http/HTTPEngineSender.cpp index 43a3d44c..674b2674 100644 --- a/src/http/HTTPEngineSender.cpp +++ b/src/http/HTTPEngineSender.cpp @@ -39,12 +39,13 @@ namespace Client { HTTPEngineSender::HTTPEngineSender(World* world, const URI& engine_url, SharedPtr<Raul::Deletable> receiver) - : _receiver(receiver) + : _receiver(PtrCast<HTTPClientReceiver>(receiver)) , _world(*world->rdf_world()) , _engine_url(engine_url) , _id(0) , _enabled(true) { + assert(_receiver); _session = soup_session_sync_new(); } @@ -57,8 +58,9 @@ void HTTPEngineSender::attach(int32_t ping_id, bool block) { LOG(debug) << "Attaching to " << _engine_url << endl; - SoupMessage* msg = soup_message_new ("GET", _engine_url.c_str()); - HTTPClientReceiver::send(msg); + SoupMessage* msg = soup_message_new("GET", _engine_url.c_str()); + soup_session_queue_message(_session, msg, + HTTPClientReceiver::message_callback, _receiver.get()); } /* *** ServerInterface implementation below here *** */ @@ -175,7 +177,7 @@ HTTPEngineSender::ping() void HTTPEngineSender::get(const URI& uri) { - if (!Raul::Path::is_path(uri) && uri.scheme() != "http") { + if (!Raul::Path::is_path(uri) && uri.scheme() != "http" && uri.scheme() != "ingen") { LOG(warn) << "Ignoring GET of non-HTTP URI " << uri << endl; return; } @@ -186,7 +188,9 @@ HTTPEngineSender::get(const URI& uri) cout << "Get " << request_uri << endl; LOG(debug) << "Get " << request_uri << endl; SoupMessage* msg = soup_message_new("GET", request_uri.c_str()); - HTTPClientReceiver::send(msg); + soup_session_queue_message(_session, msg, + HTTPClientReceiver::message_callback, _receiver.get()); + } } // namespace Client diff --git a/src/http/HTTPEngineSender.hpp b/src/http/HTTPEngineSender.hpp index 14439e39..c7296bcc 100644 --- a/src/http/HTTPEngineSender.hpp +++ b/src/http/HTTPEngineSender.hpp @@ -109,7 +109,7 @@ public: void get(const Raul::URI& uri); protected: - SharedPtr<Raul::Deletable> _receiver; + SharedPtr<HTTPClientReceiver> _receiver; SoupSession* _session; Sord::World& _world; diff --git a/src/ingen/main.cpp b/src/ingen/main.cpp index 38442878..8a929458 100644 --- a/src/ingen/main.cpp +++ b/src/ingen/main.cpp @@ -45,7 +45,7 @@ #include "ingen/shared/Configuration.hpp" #include "ingen/shared/World.hpp" #include "ingen/shared/runtime_paths.hpp" -#include "ingen/client/ThreadedSigClientInterface.hpp" +#include "ingen/client/SigClientInterface.hpp" #ifdef WITH_BINDINGS #include "bindings/ingen_bindings.hpp" #endif @@ -156,9 +156,9 @@ main(int argc, char** argv) ingen_try(world->load_module("http_client"), "Unable to load HTTP client module"); #endif - const char* const uri = conf.option("connect").get_string(); - ingen_try((engine_interface = world->interface(uri, SharedPtr<ClientInterface>())), + SharedPtr<ClientInterface> client(new Client::SigClientInterface()); + ingen_try((engine_interface = world->interface(uri, client)), (string("Unable to create interface to `") + uri + "'").c_str()); } diff --git a/src/shared/World.cpp b/src/shared/World.cpp index 1e3dc46f..dee5b9b6 100644 --- a/src/shared/World.cpp +++ b/src/shared/World.cpp @@ -170,7 +170,6 @@ public: SharedPtr<Serialisation::Serialiser> serialiser; SharedPtr<Serialisation::Parser> parser; SharedPtr<Store> store; - SharedPtr<ClientInterface> client; LilvWorld* lilv_world; std::string jack_uuid; }; @@ -191,7 +190,6 @@ void World::set_engine(SharedPtr<ServerInterface> e) { _impl->engi void World::set_serialiser(SharedPtr<Serialisation::Serialiser> s) { _impl->serialiser = s; } void World::set_parser(SharedPtr<Serialisation::Parser> p) { _impl->parser = p; } void World::set_store(SharedPtr<Store> s) { _impl->store = s; } -void World::set_client(SharedPtr<ClientInterface> c) { _impl->client = c; } void World::set_conf(Raul::Configuration* c) { _impl->conf = c; } int& World::argc() { return _impl->argc; } @@ -201,7 +199,6 @@ SharedPtr<ServerInterface> World::engine() { return _impl->engin SharedPtr<Serialisation::Serialiser> World::serialiser() { return _impl->serialiser; } SharedPtr<Serialisation::Parser> World::parser() { return _impl->parser; } SharedPtr<Store> World::store() { return _impl->store; } -SharedPtr<ClientInterface> World::client() { return _impl->client; } Raul::Configuration* World::conf() { return _impl->conf; } LV2Features* World::lv2_features() { return _impl->lv2_features; } |