From 281bbcc6a7208c28283bc9bdd521c5d6cc48a60f Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 10 May 2012 02:14:55 +0000 Subject: Bidirectional socket communication (GUI once again works remotely). git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4335 a436a847-0d15-0410-975c-d299462d15a1 --- src/socket/SocketReader.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'src/socket/SocketReader.cpp') diff --git a/src/socket/SocketReader.cpp b/src/socket/SocketReader.cpp index 2d1b5c14..74d441ef 100644 --- a/src/socket/SocketReader.cpp +++ b/src/socket/SocketReader.cpp @@ -31,12 +31,12 @@ namespace Socket { SocketReader::SocketReader(Ingen::Shared::World& world, Interface& iface, - int conn) + SharedPtr sock) : _world(world) , _iface(iface) , _inserter(NULL) , _msg_node(NULL) - , _conn(conn) + , _socket(sock) { set_name("SocketReader"); start(); @@ -46,7 +46,6 @@ SocketReader::~SocketReader() { stop(); join(); - close(_conn); } SerdStatus @@ -119,12 +118,12 @@ SocketReader::_run() serd_env_set_base_uri(_env, sord_node_to_serd_node(base_uri)); // Read directly from the connection with serd - FILE* f = fdopen(_conn, "r"); + FILE* f = fdopen(_socket->fd(), "r"); if (!f) { - LOG(Raul::error) << "Failed to open connection " << _conn + LOG(Raul::error) << "Failed to open connection " << "(" << strerror(errno) << ")" << std::endl; // Connection gone, exit - _conn = -1; + _socket.reset(); return; } @@ -137,7 +136,7 @@ SocketReader::_run() _iface); struct pollfd pfd; - pfd.fd = _conn; + pfd.fd = _socket->fd(); pfd.events = POLLIN; pfd.revents = 0; @@ -159,7 +158,7 @@ SocketReader::_run() if (st == SERD_FAILURE) { continue; // Read nothing, e.g. just whitespace } else if (st) { - fprintf(stderr, "Read error: %s\n", serd_strerror(st)); + LOG(Raul::error) << "Read error: " << serd_strerror(st) << std::endl; continue; } else if (!_msg_node) { LOG(Raul::error) << "Received empty message" << std::endl; @@ -172,9 +171,6 @@ SocketReader::_run() // Call _iface methods based on atom content ar.write((LV2_Atom*)chunk.buf); - // Respond and close connection - write(_conn, "OK", 2); - // Reset everything for the next iteration chunk.len = 0; sord_node_free(world->c_obj(), _msg_node); -- cgit v1.2.1