AppMapServer::AppMapServer(int _port) { port = _port; XMongoDBService::GetConnection().createIndex(MAPS_COLLECTION_NAME, BSON("loc" << "2d")); CROW_ROUTE(app, "/getMap") .methods("GET"_method) ([this](const crow::request& req){ auto params = req.url_params; auto param_longitude = atof(params.get("longitude")); auto param_latitude = atof(params.get("latitude")); XMap retMap = this->getMap(param_longitude, param_latitude); return retMap.toJSON(); }); CROW_ROUTE(app, "/postMap") .methods("POST"_method) ([this](const crow::request& req){ XMapMessage mapmsg; mapmsg.fromJSON(req.body); return postMap(mapmsg); }); CROW_ROUTE(app, "/getVersion") .methods("GET"_method) ([this](const crow::request& req){ auto params = req.url_params; auto param_longitude = atof(params.get("longitude")); auto param_latitude = atof(params.get("latitude")); XMap retMap = this->getMap(param_longitude, param_latitude); std::stringstream output_string; output_string << retMap.getVersion(); return output_string.str(); }); }
int main() { crow::Crow app; CROW_ROUTE(app, "/") .name("hello") ([]{ return "Hello World!"; }); CROW_ROUTE(app, "/about") ([](){ return "About Crow example."; }); // simple json response CROW_ROUTE(app, "/json") ([]{ crow::json::wvalue x; x["message"] = "Hello, World!"; return x; }); CROW_ROUTE(app,"/hello/<int>") ([](int count){ if (count > 100) return crow::response(400); std::ostringstream os; os << count << " bottles of beer!"; return crow::response(os.str()); }); // Compile error with message "Handler type is mismatched with URL paramters" //CROW_ROUTE(app,"/another/<int>") //([](int a, int b){ //return crow::response(500); //}); // more json example CROW_ROUTE(app, "/add_json") ([](const crow::request& req){ auto x = crow::json::load(req.body); if (!x) return crow::response(400); int sum = x["a"].i()+x["b"].i(); std::ostringstream os; os << sum; return crow::response{os.str()}; }); //crow::logger::setLogLevel(LogLevel::INFO); //crow::logger::setHandler(std::make_shared<ExampleLogHandler>()); app.port(18080) .multithreaded() .run(); }
// The main function for the example program int main() { // Handles ctrl-c or other orderly exits signal(SIGINT, exit_handler); // check that we are running on Galileo or Edison mraa_platform_t platform = mraa_get_platform_type(); if ((platform != MRAA_INTEL_GALILEO_GEN1) && (platform != MRAA_INTEL_GALILEO_GEN2) && (platform != MRAA_INTEL_EDISON_FAB_C)) { std::cerr << "ERROR: Unsupported platform" << std::endl; return MRAA_ERROR_INVALID_PLATFORM; } // create and initialize UPM devices devices.init(); // start worker thread for device communication std::thread t1(runner, std::ref(devices)); // define web server & routes crow::SimpleApp app; CROW_ROUTE(app, "/") ([]() { std::stringstream text; text << index_html; return text.str(); }); CROW_ROUTE(app, "/data.json") ([](const crow::request& req) { crow::json::wvalue result; for (int i = 0; i < 360; i++) { result[i] = degrees[i]; } return crow::response{result}; }); CROW_ROUTE(app, "/styles.css") ([]() { std::stringstream text; text << styles_css; return text.str(); }); // start web server app.port(3000).multithreaded().run(); // wait forever for the thread to exit t1.join(); return MRAA_SUCCESS; }
int main() { crow::Crow app; CROW_ROUTE(app, "/") .name("hello") ([]{ return "Hello World!"; }); CROW_ROUTE(app, "/about") ([](){ return "About Crow example."; }); // simple json response CROW_ROUTE(app, "/json") ([]{ crow::json::wvalue x; x["message"] = "Hello, World!"; return x; }); CROW_ROUTE(app,"/hello/<int>") ([](int count){ if (count > 100) return crow::response(400); std::ostringstream os; os << count << " bottles of beer!"; return crow::response(os.str()); }); // more json example CROW_ROUTE(app, "/add_json") ([](const crow::request& req){ auto x = crow::json::load(req.body); if (!x) return crow::response(400); int sum = x["a"].i()+x["b"].i(); std::ostringstream os; os << sum; return crow::response{os.str()}; }); app.port(18080) .multithreaded() .run(); }
int main() { crow::SimpleApp app; CROW_ROUTE(app , "/about") ([](){ return "About Crow Exemplo C++ is power"; }); CROW_ROUTE(app, "/json") ([]{ crow::json::wvalue x; x["message"] = "Hello, World!"; return x; }); CROW_ROUTE(app,"/hello/<int>") ([](int count){ if (count > 100) return crow::response(400); std::ostringstream os; os << count << " bottles of beer!"; return crow::response(os.str()); }); CROW_ROUTE(app, "/add_json") .methods("POST"_method) ([](const crow::request& req){ auto x = crow::json::load(req.body); if (!x) return crow::response(400); int sum = x["a"].i()+x["b"].i(); std::ostringstream os; os << sum; return crow::response{os.str()}; }); app.port(3000) .multithreaded() .run(); }
int main() { crow::SimpleApp app; std::mutex mtx;; std::unordered_set<crow::websocket::connection*> users; CROW_ROUTE(app, "/ws") .websocket() .onopen([&](crow::websocket::connection& conn){ CROW_LOG_INFO << "new websocket connection"; std::lock_guard<std::mutex> _(mtx); users.insert(&conn); }) .onclose([&](crow::websocket::connection& conn, const std::string& reason){ CROW_LOG_INFO << "websocket connection closed: " << reason; std::lock_guard<std::mutex> _(mtx); users.erase(&conn); }) .onmessage([&](crow::websocket::connection& /*conn*/, const std::string& data, bool is_binary){ std::lock_guard<std::mutex> _(mtx); for(auto u:users) if (is_binary) u->send_binary(data); else u->send_text(data); }); CROW_ROUTE(app, "/") ([]{ auto page = crow::mustache::load("ws.html"); return page.render(); }); app.port(40080) .multithreaded() .run(); }
int main() { crow::SimpleApp app; CROW_ROUTE(app, "/") .name("hello") ([]{ return "Hello World!"; }); CROW_ROUTE(app, "/about") ([](){ return "About Crow example."; }); // simple json response CROW_ROUTE(app, "/json") ([]{ crow::json::wvalue x; x["message"] = "Hello, World!"; return x; }); CROW_ROUTE(app,"/hello/<int>") ([](int count){ if (count > 100) return crow::response(400); std::ostringstream os; os << count << " bottles of beer!"; return crow::response(os.str()); }); CROW_ROUTE(app, "/count") ([]() { static std::atomic<int> count(0); count = count + 1; return crow::response(std::to_string(count)); }); CROW_ROUTE(app,"/add/<int>/<int>") ([](const crow::request& req, crow::response& res, int a, int b){ std::ostringstream os; os << a+b; res.write(os.str()); res.end(); }); // Compile error with message "Handler type is mismatched with URL paramters" //CROW_ROUTE(app,"/another/<int>") //([](int a, int b){ //return crow::response(500); //}); // more json example CROW_ROUTE(app, "/add_json") ([](const crow::request& req){ auto x = crow::json::load(req.body); if (!x) return crow::response(400); int sum = x["a"].i()+x["b"].i(); std::ostringstream os; os << sum; return crow::response{os.str()}; }); CROW_ROUTE(app, "/params") ([](const crow::request& req){ std::ostringstream os; os << "Params: " << req.url_params << "\n\n"; os << "The key 'foo' was " << (req.url_params.get("foo") == nullptr ? "not " : "") << "found.\n"; if(req.url_params.get("pew") != nullptr) { double countD = boost::lexical_cast<double>(req.url_params.get("pew")); os << "The value of 'pew' is " << countD << '\n'; } auto count = req.url_params.get_list("count"); os << "The key 'count' contains " << count.size() << " value(s).\n"; for(const auto& countVal : count) { os << " - " << countVal << '\n'; } return crow::response{os.str()}; }); // ignore all log crow::logger::setLogLevel(crow::LogLevel::DEBUG); auto handler(std::make_shared<ExampleLogHandler>()); crow::logger::setHandler(handler.get()); app.port(18080) .multithreaded() .run(); }
int main() { crow::App<ExampleMiddleware> app; app.get_middleware<ExampleMiddleware>().setMessage("hello"); CROW_ROUTE(app, "/") .name("hello") ([]{ return "Hello World!"; }); CROW_ROUTE(app, "/about") ([](){ return "About Crow example."; }); // a request to /path should be forwarded to /path/ CROW_ROUTE(app, "/path/") ([](){ return "Trailing slash test case.."; }); // simple json response // To see it in action enter {ip}:18080/json CROW_ROUTE(app, "/json") ([]{ crow::json::wvalue x; x["message"] = "Hello, World!"; return x; }); // To see it in action enter {ip}:18080/hello/{integer_between -2^32 and 100} and you should receive // {integer_between -2^31 and 100} bottles of beer! CROW_ROUTE(app,"/hello/<int>") ([](int count){ if (count > 100) return crow::response(400); std::ostringstream os; os << count << " bottles of beer!"; return crow::response(os.str()); }); // To see it in action submit {ip}:18080/add/1/2 and you should receive 3 (exciting, isn't it) CROW_ROUTE(app,"/add/<int>/<int>") ([](const crow::request& /*req*/, crow::response& res, int a, int b){ std::ostringstream os; os << a+b; res.write(os.str()); res.end(); }); // Compile error with message "Handler type is mismatched with URL paramters" //CROW_ROUTE(app,"/another/<int>") //([](int a, int b){ //return crow::response(500); //}); // more json example // To see it in action, I recommend to use the Postman Chrome extension: // * Set the address to {ip}:18080/add_json // * Set the method to post // * Select 'raw' and then JSON // * Add {"a": 1, "b": 1} // * Send and you should receive 2 // A simpler way for json example: // * curl -d '{"a":1,"b":2}' {ip}:18080/add_json CROW_ROUTE(app, "/add_json") .methods("POST"_method) ([](const crow::request& req){ auto x = crow::json::load(req.body); if (!x) return crow::response(400); int sum = x["a"].i()+x["b"].i(); std::ostringstream os; os << sum; return crow::response{os.str()}; }); // Example of a request taking URL parameters // If you want to activate all the functions just query // {ip}:18080/params?foo='blabla'&pew=32&count[]=a&count[]=b CROW_ROUTE(app, "/params") ([](const crow::request& req){ std::ostringstream os; // To get a simple string from the url params // To see it in action /params?foo='blabla' os << "Params: " << req.url_params << "\n\n"; os << "The key 'foo' was " << (req.url_params.get("foo") == nullptr ? "not " : "") << "found.\n"; // To get a double from the request // To see in action submit something like '/params?pew=42' if(req.url_params.get("pew") != nullptr) { double countD = boost::lexical_cast<double>(req.url_params.get("pew")); os << "The value of 'pew' is " << countD << '\n'; } // To get a list from the request // You have to submit something like '/params?count[]=a&count[]=b' to have a list with two values (a and b) auto count = req.url_params.get_list("count"); os << "The key 'count' contains " << count.size() << " value(s).\n"; for(const auto& countVal : count) { os << " - " << countVal << '\n'; } // To get a dictionary from the request // You have to submit something like '/params?mydict[a]=b&mydict[abcd]=42' to have a list of pairs ((a, b) and (abcd, 42)) auto mydict = req.url_params.get_dict("mydict"); os << "The key 'dict' contains " << mydict.size() << " value(s).\n"; for(const auto& mydictVal : mydict) { os << " - " << mydictVal.first << " -> " << mydictVal.second << '\n'; } return crow::response{os.str()}; }); CROW_ROUTE(app, "/large") ([]{ return std::string(512*1024, ' '); }); // enables all log app.loglevel(crow::LogLevel::DEBUG); //crow::logger::setHandler(std::make_shared<ExampleLogHandler>()); app.port(18080) .multithreaded() .run(); }
int main() { crow::SimpleApp app; CROW_ROUTE(app, "/")([]() { return "Hello World"; }); crow::logger::setLogLevel(crow::LogLevel::ERROR); app.port(8080).multithreaded().run(); }