#include <iostream>
#include <cpprest/http_listener.h>
#include <cpprest/json.h>
using namespace web;
using namespace web::http;
using namespace web::http::experimental::listener;
class CrossOriginServer {
public:
CrossOriginServer(const utility::string_t& url);
pplx::task<void> open() { return m_listener.open(); }
pplx::task<void> close() { return m_listener.close(); }
private:
void handle_request(http_request request);
http_listener m_listener;
};
CrossOriginServer::CrossOriginServer(const utility::string_t& url)
: m_listener(url)
{
m_listener.support(methods::GET, std::bind(&CrossOriginServer::handle_request, this, std::placeholders::_1));
m_listener.support(methods::POST, std::bind(&CrossOriginServer::handle_request, this, std::placeholders::_1));
}
void CrossOriginServer::handle_request(http_request request)
{
// Allow cross-origin requests
web::http::http_response response(status_codes::OK);
response.headers().set(U("Access-Control-Allow-Origin"), U("*"));
response.headers().set(U("Access-Control-Allow-Methods"), U("GET, POST"));
response.headers().set(U("Access-Control-Allow-Headers"), U("Content-Type"));
// Your request handling logic here
request.reply(response);
}
int main()
{
utility::string_t url = U("http://localhost:8080");
CrossOriginServer server(url);
try {
server.open().wait();
std::wcout << U("Listening for requests at: ") << url << std::endl;
std::this_thread::sleep_for(std::chrono::hours(24)); // Run for 24 hours (or any desired duration)
server.close().wait();
}
catch (std::exception const& e) {
std::wcerr << e.what() << std::endl;
}
return 0;
}