You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.3 KiB
C++
57 lines
1.3 KiB
C++
#include <thread>
|
|
|
|
#include <QApplication>
|
|
|
|
#include "examples/qt_app_server/main_window.h"
|
|
|
|
#include "webcc/logger.h"
|
|
#include "webcc/response_builder.h"
|
|
#include "webcc/server.h"
|
|
#include "webcc/view.h"
|
|
|
|
class ApiView : public webcc::View {
|
|
public:
|
|
explicit ApiView(Context* context) : context_(context) {
|
|
}
|
|
|
|
webcc::ResponsePtr Handle(webcc::RequestPtr request) override {
|
|
if (request->method() == "GET") {
|
|
emit context_->SomeApiSignal("A GET request has been handled");
|
|
return webcc::ResponseBuilder{}.OK().Body("Hello, World!")();
|
|
}
|
|
|
|
return {};
|
|
}
|
|
|
|
private:
|
|
Context* context_;
|
|
};
|
|
|
|
int main(int argc, char** argv) {
|
|
QApplication app{ argc, argv };
|
|
|
|
WEBCC_LOG_INIT("", webcc::LOG_CONSOLE);
|
|
|
|
Context context;
|
|
|
|
// Create a server and bind view.
|
|
webcc::Server server{ boost::asio::ip::tcp::v4(), 8000 };
|
|
server.Route("/", std::make_shared<ApiView>(&context));
|
|
|
|
// Run the server in a thread to avoid blocking the GUI.
|
|
std::thread server_thread{ [&server]() { server.Run(); } };
|
|
|
|
// Now show our Qt main window and execute the application loop.
|
|
MainWindow main_window{ &context };
|
|
main_window.resize(400, 300);
|
|
main_window.showNormal();
|
|
|
|
int code = app.exec();
|
|
|
|
// Stop the server and wait for it to finish.
|
|
server.Stop();
|
|
server_thread.join();
|
|
|
|
return code;
|
|
}
|