| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #include "mainwindow.h"
- #include <QApplication>
- #include <QCommandLineParser>
- #include <QTranslator>
- #include <QWebSocket>
- #include <QWebSocketServer>
- #include <cwf/constants.h>
- #include <cwf/cppwebapplication.h>
- #include <cwf/filter.h>
- #include <cwf/sqldatabasestorage.h>
- #include "appevent.h"
- #include "qglobal.h"
- #include "tcontroller.h"
- #include "tlogin.h"
- #include "tmodel.h"
- #include "websocketserver.h"
- #include "qtsingleapplication.h"
- void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
- {
- QString txt;
- switch (type) {
- case QtDebugMsg:
- txt = QString("Debug: %1").arg(msg);
- break;
- case QtInfoMsg:
- txt = QString("Info: %1").arg(msg);
- break;
- case QtWarningMsg:
- txt = QString("Warning: %1").arg(msg);
- break;
- case QtCriticalMsg:
- txt = QString("Critical: %1").arg(msg);
- break;
- case QtFatalMsg:
- txt = QString("Fatal: %1").arg(msg);
- break;
- }
- QFile outFile("log.txt");
- outFile.open(QIODevice::WriteOnly | QIODevice::Append);
- QTextStream ts(&outFile);
- ts << QDateTime::currentDateTime().toString(Qt::ISODate) << " " << txt << " (" << context.file
- << ":" << context.line << ")" << Qt::endl;
- }
- CWF::SqlDatabaseStorage storage("QSQLITE", "localhost", "data.db", "", "");
- //中间件 做 jwt 校验等处理
- class MiddlewareFilter : public CWF::Filter
- {
- public:
- void doFilter(CWF::Request &request, CWF::Response &response, CWF::FilterChain &chain) override
- {
- const CWF::HttpParser &httpParser = request.getHttpParser();
- const QByteArray websocket = httpParser.getHeaderField("Upgrade");
- if (websocket.isEmpty()) {
- chain.doFilter(request, response);
- } else {
- }
- }
- };
- int main(int argc, char *argv[])
- {
- // QApplication a(argc, argv);
- SharedTools::QtSingleApplication a("teacher server", argc, argv);
- if (a.isRunning()) {
- a.sendMessage("", 1000);
- return 0;
- }
- QObject::connect(&a,
- &SharedTools::QtSingleApplication::messageReceived,
- &a,
- &SharedTools::QtSingleApplication::activateWindow);
- QCoreApplication::setApplicationName("teacher server");
- QCoreApplication::setApplicationVersion("1.0");
- QCommandLineParser parser;
- parser.addHelpOption();
- parser.addVersionOption();
- QCommandLineOption debugOption("debug", "Enable debug mode");
- parser.addOption(debugOption);
- parser.process(a);
- if (parser.isSet(debugOption)) {
- qInstallMessageHandler(customMessageHandler);
- }
- AppEvent::instance()->configLoad();
- WebSocketServer::getInstance();
- QTranslator translator;
- const QStringList uiLanguages = QLocale::system().uiLanguages();
- for (const QString &locale : uiLanguages) {
- const QString baseName = "teacherServer_" + QLocale(locale).name();
- if (translator.load(":/i18n/" + baseName)) {
- a.installTranslator(&translator);
- break;
- }
- }
- UserModel{storage}.updateDB();
- ExamsQuestionModel{storage}.updateDB();
- ExamsTestModel{storage}.updateDB();
- MiddlewareFilter middlewareFilter;
- CWF::CppWebApplication server("/server", &middlewareFilter);
- server.addController<HelloController>("/hello");
- server.addController<ConfigController>("/api/v1/config");
- server.addController<LoginController>("/api/v1/user/login");
- server.addController<UserInfoController>("/api/v1/user/userInfo");
- server.addController<LoginOutController>("/api/v1/user/loginOut");
- server.addController<ExamsController>("/api/v1/exams/content");
- server.addController<ExamsFilesController>("/api/v1/exams/files");
- server.addController<UploadedFilesController>("/api/v1/exams/uploaded");
- server.addController<ExamsAnswerTimeController>("/api/v1/exams/answerTime");
- server.addController<TableDataController>("/api/v1/tableData");
- server.addController<TableDataExamRoomController>("/api/v1/tableDataRoom");
- TLogin login;
- std::unique_ptr<MainWindow> mainWindow = nullptr;
- QObject::connect(&login, &TLogin::loginSuccessful, [&]() {
- mainWindow = std::make_unique<MainWindow>();
- mainWindow->show();
- });
- login.exec();
- if (!mainWindow) {
- return 0;
- }
- // MainWindow w;
- // w.show();
- a.setActivationWindow(mainWindow.get());
- const QString ip = AppEvent::instance()->configValue("serverIP").toString();
- const int port = AppEvent::instance()->configValue("serverPort").toInt();
- QSettings settings("./server/config/CPPWeb.ini", QSettings::Format::IniFormat);
- settings.beginGroup("config");
- settings.setValue("host", ip);
- settings.setValue("port", port);
- server.start(QHostAddress(ip), port);
- // return a.exec();
- return a.exec();
- }
|