#include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include "appevent.h" #include "qglobal.h" #include "tcontroller.h" #include "tlogin.h" #include "tmodel.h" #include "websocketserver.h" #include "qtsingleapplication.h" #include 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(); CWF::SqlQuery query(storage); // 清理数据库 QJsonObject status = query.exec(R"(DELETE FROM exams_question WHERE id NOT IN ( SELECT MIN(id) FROM exams_question GROUP BY name );)"); if (status["success"].toBool()) { // } else { qDebug() << "清理 exams_question 数据库失败"; } MiddlewareFilter middlewareFilter; CWF::CppWebApplication server("/server", &middlewareFilter); server.addController("/hello"); server.addController("/api/v1/config"); server.addController("/api/v1/user/login"); server.addController("/api/v1/user/userInfo"); server.addController("/api/v1/user/loginOut"); server.addController("/api/v1/exams/content"); server.addController("/api/v1/exams/files"); server.addController("/api/v1/exams/uploaded"); server.addController("/api/v1/exams/answerTime"); server.addController("/api/v1/tableData"); server.addController("/api/v1/tableDataRoom"); // { // const QString answerFileName = "测试"; // const QString checkinNumber = "checkinNumber"; // int endTime = 10; // const QString examRoom = "examRoom"; // 考试房间 // const QString examSessions = "examSessions"; //考试场次 // const QString examText = "examText"; //考试内容 // const QString examineNumber; // 考试编号 // const QString groupName = "groupName"; // const QString name = "name"; // int onlineStatus = 1; // const QString schoolAddress = ""; // const QString schoolName = "schoolName"; // int sex = 0; // int startTime = 0; // int status = 1; // const QString swId = "swId"; // TC::GradesUpdate gradesUpdate(answerFileName, // checkinNumber, // endTime, // examRoom, // examSessions, // examText, // examineNumber, // groupName, // name, // onlineStatus, // schoolAddress, // schoolName, // sex, // startTime, // status, // swId); // gradesUpdate.postAsync([](const TC::GradesUpdate::Data& data) { // qDebug() << "Update result:" << data.success << data.message; // }); // } TLogin login; std::unique_ptr mainWindow = nullptr; QObject::connect(&login, &TLogin::loginSuccessful, [&]() { mainWindow = std::make_unique(); 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(); }