summaryrefslogtreecommitdiffstats
path: root/src/client
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-12-19 21:37:50 +0000
committerDavid Robillard <d@drobilla.net>2009-12-19 21:37:50 +0000
commit19045ab92aa7e996971584a0dc8780d1d58b498b (patch)
tree619c73deb7fd64ce31c5167490d1ae186dbb2695 /src/client
parent4613a2e15f1122ecf6830171de0ab18dc22fefff (diff)
downloadingen-19045ab92aa7e996971584a0dc8780d1d58b498b.tar.gz
ingen-19045ab92aa7e996971584a0dc8780d1d58b498b.tar.bz2
ingen-19045ab92aa7e996971584a0dc8780d1d58b498b.zip
New ingen module (library, not e.g. LV2 plugin) design.
Much cleaner interface and general usage of Ingen as a library. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2314 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/client')
-rw-r--r--src/client/HTTPClientReceiver.cpp19
-rw-r--r--src/client/HTTPClientReceiver.hpp5
-rw-r--r--src/client/client.cpp64
-rw-r--r--src/client/client.hpp45
4 files changed, 44 insertions, 89 deletions
diff --git a/src/client/HTTPClientReceiver.cpp b/src/client/HTTPClientReceiver.cpp
index b8229998..879d648a 100644
--- a/src/client/HTTPClientReceiver.cpp
+++ b/src/client/HTTPClientReceiver.cpp
@@ -127,7 +127,7 @@ HTTPClientReceiver::close_session()
void
HTTPClientReceiver::update(const std::string& str)
{
- cout << _parser->parse_update(_world, _target.get(), str, _url);
+ cout << _world->parser->parse_update(_world, _target.get(), str, _url);
}
void
@@ -185,7 +185,7 @@ HTTPClientReceiver::message_callback(SoupSession* session, SoupMessage* msg, voi
} else {
Glib::Mutex::Lock lock(me->_mutex);
me->_target->response_ok(0);
- me->_parser->parse_string(me->_world, me->_target.get(),
+ me->_world->parser->parse_string(me->_world, me->_target.get(),
Glib::ustring(msg->response_body->data), me->_url);
}
@@ -195,7 +195,7 @@ HTTPClientReceiver::message_callback(SoupSession* session, SoupMessage* msg, voi
} else {
Glib::Mutex::Lock lock(me->_mutex);
me->_target->response_ok(0);
- me->_parser->parse_string(me->_world, me->_target.get(),
+ me->_world->parser->parse_string(me->_world, me->_target.get(),
Glib::ustring(msg->response_body->data),
Glib::ustring("/patch/"));
}
@@ -224,16 +224,9 @@ void
HTTPClientReceiver::start(bool dump)
{
Glib::Mutex::Lock lock(_world->rdf_world->mutex());
- if (!_parser) {
- if (!_world->serialisation_module)
- _world->serialisation_module = Ingen::Shared::load_module("ingen_serialisation");
-
- if (_world->serialisation_module) {
- Parser* (*new_parser)() = NULL;
- if (_world->serialisation_module->get_symbol("new_parser", (void*&)new_parser))
- _parser = SharedPtr<Parser>(new_parser());
- }
- }
+
+ if (!_world->parser)
+ _world->load("ingen_serialisation");
SoupMessage* msg = soup_message_new("GET", (_url + "/stream").c_str());
soup_session_queue_message(client_session, msg, message_callback, this);
diff --git a/src/client/HTTPClientReceiver.hpp b/src/client/HTTPClientReceiver.hpp
index 7cb42948..4916ddea 100644
--- a/src/client/HTTPClientReceiver.hpp
+++ b/src/client/HTTPClientReceiver.hpp
@@ -71,9 +71,8 @@ private:
Glib::Mutex _mutex;
SharedPtr<Shared::ClientInterface> _target;
- Shared::World* _world;
- const std::string _url;
- SharedPtr<Serialisation::Parser> _parser;
+ Shared::World* _world;
+ const std::string _url;
};
diff --git a/src/client/client.cpp b/src/client/client.cpp
index 53d7810f..9512ba44 100644
--- a/src/client/client.cpp
+++ b/src/client/client.cpp
@@ -16,9 +16,9 @@
*/
#include "ingen-config.h"
-
-#include <iostream>
-#include "client.hpp"
+#include "raul/SharedPtr.hpp"
+#include "module/Module.hpp"
+#include "module/World.hpp"
#ifdef HAVE_LIBLO
#include "OSCEngineSender.hpp"
#endif
@@ -26,39 +26,47 @@
#include "HTTPEngineSender.hpp"
#endif
+using namespace Ingen;
-using namespace std;
-
-namespace Ingen {
-namespace Client {
-
-
+#ifdef HAVE_LIBLO
SharedPtr<Ingen::Shared::EngineInterface>
-new_remote_interface(Ingen::Shared::World* world, const std::string& url)
+new_osc_interface(Ingen::Shared::World* world, const std::string& url)
{
- const string scheme = url.substr(0, url.find(":"));
-
-#ifdef HAVE_LIBLO
- if (scheme == "osc.udp" || scheme == "osc.tcp") {
- OSCEngineSender* oes = OSCEngineSender::create(url);
- oes->attach(rand(), true);
- return SharedPtr<Shared::EngineInterface>(oes);
- }
+ Client::OSCEngineSender* oes = Client::OSCEngineSender::create(url);
+ oes->attach(rand(), true);
+ return SharedPtr<Shared::EngineInterface>(oes);
+}
#endif
#ifdef HAVE_SOUP
- if (scheme == "http") {
- HTTPEngineSender* hes = new HTTPEngineSender(world, url);
- hes->attach(rand(), true);
- return SharedPtr<Shared::EngineInterface>(hes);
- }
+SharedPtr<Ingen::Shared::EngineInterface>
+new_http_interface(Ingen::Shared::World* world, const std::string& url)
+{
+ Client::HTTPEngineSender* hes = new Client::HTTPEngineSender(world, url);
+ hes->attach(rand(), true);
+ return SharedPtr<Shared::EngineInterface>(hes);
+}
#endif
- cerr << "WARNING: Unknown URI scheme '" << scheme << "'" << endl;
- return SharedPtr<Shared::EngineInterface>();
-}
+struct IngenClientModule : public Ingen::Shared::Module {
+ void load(Ingen::Shared::World* world) {
+ world->interface_factories.insert(make_pair("osc.udp", &new_osc_interface));
+ world->interface_factories.insert(make_pair("osc.tcp", &new_osc_interface));
+ world->interface_factories.insert(make_pair("http", &new_http_interface));
+ }
+};
+static IngenClientModule* module = NULL;
+
+extern "C" {
+
+Ingen::Shared::Module*
+ingen_module_load() {
+ if (!module)
+ module = new IngenClientModule();
+
+ return module;
+}
-} // namespace Client
-} // namespace Ingen
+} // extern "C"
diff --git a/src/client/client.hpp b/src/client/client.hpp
deleted file mode 100644
index 9ad1423a..00000000
--- a/src/client/client.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/* This file is part of Ingen.
- * Copyright (C) 2007-2009 Dave Robillard <http://drobilla.net>
- *
- * Ingen is free software; you can redistribute it and/or modify it under the
- * terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * Ingen is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef INGEN_CLIENT_H
-#define INGEN_CLIENT_H
-
-#include "raul/SharedPtr.hpp"
-
-namespace Ingen {
-
-class Engine;
-
-namespace Shared { class EngineInterface; class World; }
-
-namespace Client {
-
-extern "C" {
-
- SharedPtr<Shared::EngineInterface> new_remote_interface(
- Shared::World* world, const std::string& url);
-
- SharedPtr<Shared::EngineInterface> new_queued_interface(SharedPtr<Ingen::Engine> engine);
-
-}
-
-
-} // namespace Client
-} // namespace Ingen
-
-#endif // INGEN_CLIENT_H
-