diff --git a/net/CMakeLists.txt b/net/CMakeLists.txt index 5af66370e1e966adee4cad7b533d347a1197f7c0..85d31c34d48dcb4e3e54a6fb5657f3f264688a87 100644 --- a/net/CMakeLists.txt +++ b/net/CMakeLists.txt @@ -29,6 +29,7 @@ set(FTLSOURCE src/listener.cpp src/socket.cpp src/dispatcher.cpp + src/protocol.cpp ) check_include_file("uriparser/Uri.h" HAVE_URI_H) diff --git a/net/include/ftl/net.hpp b/net/include/ftl/net.hpp index 0647fb3f68ef1b7466cd9ca1edb6712f55d6c03c..c0915ed7559c3a68660aa1d46055f830c31a14e0 100644 --- a/net/include/ftl/net.hpp +++ b/net/include/ftl/net.hpp @@ -40,7 +40,7 @@ bool run(bool async=false); */ bool wait(); -void wait(std::function<bool(void)>); +void wait(std::function<bool(void)>, float t=3.0f); /** * Check and process any waiting messages, but do not block if there are none. diff --git a/net/src/net.cpp b/net/src/net.cpp index d6c120a1b772e758e9b219f1ae87060fd9278ccb..0d2943f917a34e6c77a16fab0f00ef23ebf75a6a 100644 --- a/net/src/net.cpp +++ b/net/src/net.cpp @@ -191,9 +191,9 @@ bool ftl::net::wait() { return _run(false,false); } -void ftl::net::wait(std::function<bool(void)> f) { +void ftl::net::wait(std::function<bool(void)> f, float to) { auto start = steady_clock::now(); - while (!f() && duration<float>(steady_clock::now() - start).count() < 3.0) + while (!f() && duration<float>(steady_clock::now() - start).count() < to) _run(false,false); } diff --git a/net/test/net_integration.cpp b/net/test/net_integration.cpp index 0989f67726b1233e82fe8a657ecf9ddafa54a3e9..20b2c676028789402b2412c41f9143a2915ba416 100644 --- a/net/test/net_integration.cpp +++ b/net/test/net_integration.cpp @@ -178,7 +178,7 @@ TEST_CASE("net::listen()", "[net]") { bool connected = false; l->onConnection([&](shared_ptr<Socket> s) { - ftl::net::wait(); // Wait for handshake + ftl::net::wait([&s]() { return s->isConnected(); }); REQUIRE( s->isConnected() ); connected = true; }); @@ -212,11 +212,10 @@ TEST_CASE("Net Integration", "[integrate]") { shared_ptr<Socket> s2 = ftl::net::connect("tcp://localhost:9000"); - ftl::net::wait(); // TODO, make setProtocol block until handshake complete - ftl::net::wait(); - REQUIRE( s1 != nullptr ); REQUIRE( s2 != nullptr ); - + ftl::net::wait([&s2]() { return s2->isConnected(); }); + REQUIRE( s1 != nullptr ); + REQUIRE( s1->isConnected() ); REQUIRE( s2->isConnected() );