changeset 556:c9b703f923d0

Irccd: re-recv from a client
author David Demelier <markand@malikania.fr>
date Fri, 24 Nov 2017 21:20:17 +0100
parents 9b6b0d7d89c6
children c729f06c6f27
files libirccd/irccd/transport_service.cpp libirccd/irccd/transport_service.hpp
diffstat 2 files changed, 16 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/libirccd/irccd/transport_service.cpp	Fri Nov 24 21:04:32 2017 +0100
+++ b/libirccd/irccd/transport_service.cpp	Fri Nov 24 21:20:17 2017 +0100
@@ -48,23 +48,29 @@
     }
 }
 
+void transport_service::do_recv(std::shared_ptr<transport_client> tc)
+{
+    tc->recv([this, tc] (auto code, auto json) {
+        if (code)
+            log::warning() << "transport: " << code.message() << std::endl;
+        else {
+            do_recv(tc);
+            handle_command(std::move(tc), json);
+        }
+    });
+}
+
 void transport_service::do_accept(transport_server& ts)
 {
     ts.accept([this, &ts] (auto code, auto client) {
         if (code)
             log::warning() << "transport: " << code.message() << std::endl;
         else {
-            log::info() << "transport: new client connected" << std::endl;
+            do_accept(ts);
+            do_recv(std::move(client));
 
-            client->recv([this, client] (auto code, auto json) {
-                if (code)
-                    log::warning() << "transport: " << code.message() << std::endl;
-                else
-                    handle_command(std::move(client), json);
-            });
+            log::info() << "transport: new client connected" << std::endl;
         }
-
-        do_accept(ts);
     });
 }
 
--- a/libirccd/irccd/transport_service.hpp	Fri Nov 24 21:04:32 2017 +0100
+++ b/libirccd/irccd/transport_service.hpp	Fri Nov 24 21:20:17 2017 +0100
@@ -42,6 +42,7 @@
     servers_t servers_;
 
     void handle_command(std::shared_ptr<transport_client>, const nlohmann::json&);
+    void do_recv(std::shared_ptr<transport_client>);
     void do_accept(transport_server&);
 
 public: