// Libraries #include #include #include // Entrypoint int main(int argc, char* argv[]) { // Variables bool connecting = false; bool workaround = argc > 1; sio::client client; std::string url; // Events client.set_reconnecting_listener([&connecting]() mutable { connecting = true; std::cout << "[CLIENT] Reconnecting" << std::endl << std::flush; }); client.set_open_listener([&connecting]() mutable { connecting = false; std::cout << "[CLIENT] Connected" << std::endl << std::flush; }); client.set_fail_listener([&connecting]() mutable { connecting = false; std::cout << "[CLIENT] Failure" << std::endl << std::flush; }); client.set_close_listener([&connecting](sio::client::close_reason const& reason) mutable -> void* { connecting = false; std::cout << "[CLIENT] Disconnected" << std::endl << std::flush; return NULL; }); // Reconnections client.set_reconnect_delay(200); client.set_reconnect_delay_max(15000); client.set_reconnect_attempts(0xFFFFFFFF); // Client url = "http://127.0.0.1:3000"; std::cout << "[CLIENT] Connecting to " << url << "..." << std::endl << std::flush; connecting = true; client.connect(url, {}); // Socket client.socket("/"); // Holder sleep(1); // Status std::cout << "[CLIENT] State: " << (client.opened() ? "Connected" : "Disconnected") << std::endl << std::flush; // Workaround if (workaround) { std::cout << "[CLIENT] Workaround enabled upon close" << std::endl << std::flush; client.set_reconnect_attempts(0); while (connecting) { std::cout << "[CLIENT] Workaround waiting upon close..." << std::endl << std::flush; usleep(100000); } } // Disconnection std::cout << "[CLIENT] Requesting a synchronous close..." << std::endl; client.sync_close(); std::cout << "[CLIENT] Finished the synchronous close" << std::endl; // Cleanups client.clear_con_listeners(); }