#include #include #include #include #include #include #include // CMD: // C:> server.exe --http-address 0.0.0.0 --docroot . // Terminal (in parallel): // $ while [ "$(curl -s 'http://localhost/FetchData')" == "done" ]; do echo -n '.'; sleep 1; done class FetchData : public Wt::WResource { public: FetchData (Wt::WServer& server) : server(server) { } ~FetchData () override { beingDeleted(); } void handleRequest (const Wt::Http::Request& /*request*/, Wt::Http::Response& response) override { std::atomic done = false; auto client = std::make_unique(); client->done().connect([&] (boost::system::error_code err, const Wt::Http::Message& /*response*/, ...) { if (err) server.log("error") << err.message(); done = true; }); if (client->get("http://localhost/data")) { while (!done) { boost::this_thread::sleep_for(boost::chrono::milliseconds{25}); } } else { server.log("error") << "something is wrong with the url"; } response.out().write("done", 4); } private: Wt::WServer& server; }; class ServeData : public Wt::WResource { public: ServeData () = default; ~ServeData () override { beingDeleted(); } void handleRequest (const Wt::Http::Request& /*request*/, Wt::Http::Response& /*response*/) override { } }; int main (int argc, char** argv) try { Wt::WServer wserver{argc, argv}; FetchData fetchdata(wserver); wserver.addResource(&fetchdata, "/FetchData"); ServeData servedata; wserver.addResource(&servedata, "/Data"); wserver.run(); return 0; } catch (std::exception& e) { std::cerr << e.what() << std::endl; return 10; }