main.cpp 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. #include "mainwindow.h"
  2. #include <QApplication>
  3. #include <QCommandLineParser>
  4. #include <QTranslator>
  5. #include <QWebSocket>
  6. #include <QWebSocketServer>
  7. #include <cwf/constants.h>
  8. #include <cwf/cppwebapplication.h>
  9. #include <cwf/filter.h>
  10. #include <cwf/sqldatabasestorage.h>
  11. #include "appevent.h"
  12. #include "qglobal.h"
  13. #include "tcontroller.h"
  14. #include "tlogin.h"
  15. #include "tmodel.h"
  16. #include "websocketserver.h"
  17. #include "qtsingleapplication.h"
  18. #include <api/gradesapi.h>
  19. void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
  20. {
  21. QString txt;
  22. switch (type) {
  23. case QtDebugMsg:
  24. txt = QString("Debug: %1").arg(msg);
  25. break;
  26. case QtInfoMsg:
  27. txt = QString("Info: %1").arg(msg);
  28. break;
  29. case QtWarningMsg:
  30. txt = QString("Warning: %1").arg(msg);
  31. break;
  32. case QtCriticalMsg:
  33. txt = QString("Critical: %1").arg(msg);
  34. break;
  35. case QtFatalMsg:
  36. txt = QString("Fatal: %1").arg(msg);
  37. break;
  38. }
  39. QFile outFile("log.txt");
  40. outFile.open(QIODevice::WriteOnly | QIODevice::Append);
  41. QTextStream ts(&outFile);
  42. ts << QDateTime::currentDateTime().toString(Qt::ISODate) << " " << txt << " (" << context.file
  43. << ":" << context.line << ")" << Qt::endl;
  44. }
  45. CWF::SqlDatabaseStorage storage("QSQLITE", "localhost", "data.db", "", "");
  46. //中间件 做 jwt 校验等处理
  47. class MiddlewareFilter : public CWF::Filter
  48. {
  49. public:
  50. void doFilter(CWF::Request &request, CWF::Response &response, CWF::FilterChain &chain) override
  51. {
  52. const CWF::HttpParser &httpParser = request.getHttpParser();
  53. const QByteArray websocket = httpParser.getHeaderField("Upgrade");
  54. if (websocket.isEmpty()) {
  55. chain.doFilter(request, response);
  56. } else {
  57. }
  58. }
  59. };
  60. int main(int argc, char *argv[])
  61. {
  62. // QApplication a(argc, argv);
  63. SharedTools::QtSingleApplication a("teacher server", argc, argv);
  64. if (a.isRunning()) {
  65. a.sendMessage("", 1000);
  66. return 0;
  67. }
  68. QObject::connect(&a,
  69. &SharedTools::QtSingleApplication::messageReceived,
  70. &a,
  71. &SharedTools::QtSingleApplication::activateWindow);
  72. QCoreApplication::setApplicationName("teacher server");
  73. QCoreApplication::setApplicationVersion("1.0");
  74. QCommandLineParser parser;
  75. parser.addHelpOption();
  76. parser.addVersionOption();
  77. QCommandLineOption debugOption("debug", "Enable debug mode");
  78. parser.addOption(debugOption);
  79. parser.process(a);
  80. if (parser.isSet(debugOption)) {
  81. qInstallMessageHandler(customMessageHandler);
  82. }
  83. AppEvent::instance()->configLoad();
  84. WebSocketServer::getInstance();
  85. QTranslator translator;
  86. const QStringList uiLanguages = QLocale::system().uiLanguages();
  87. for (const QString &locale : uiLanguages) {
  88. const QString baseName = "teacherServer_" + QLocale(locale).name();
  89. if (translator.load(":/i18n/" + baseName)) {
  90. a.installTranslator(&translator);
  91. break;
  92. }
  93. }
  94. UserModel{storage}.updateDB();
  95. ExamsQuestionModel{storage}.updateDB();
  96. ExamsTestModel{storage}.updateDB();
  97. MiddlewareFilter middlewareFilter;
  98. CWF::CppWebApplication server("/server", &middlewareFilter);
  99. server.addController<HelloController>("/hello");
  100. server.addController<ConfigController>("/api/v1/config");
  101. server.addController<LoginController>("/api/v1/user/login");
  102. server.addController<UserInfoController>("/api/v1/user/userInfo");
  103. server.addController<LoginOutController>("/api/v1/user/loginOut");
  104. server.addController<ExamsController>("/api/v1/exams/content");
  105. server.addController<ExamsFilesController>("/api/v1/exams/files");
  106. server.addController<UploadedFilesController>("/api/v1/exams/uploaded");
  107. server.addController<ExamsAnswerTimeController>("/api/v1/exams/answerTime");
  108. server.addController<TableDataController>("/api/v1/tableData");
  109. server.addController<TableDataExamRoomController>("/api/v1/tableDataRoom");
  110. // {
  111. // const QString answerFileName = "测试";
  112. // const QString checkinNumber = "checkinNumber";
  113. // int endTime = 10;
  114. // const QString examRoom = "examRoom"; // 考试房间
  115. // const QString examSessions = "examSessions"; //考试场次
  116. // const QString examText = "examText"; //考试内容
  117. // const QString examineNumber; // 考试编号
  118. // const QString groupName = "groupName";
  119. // const QString name = "name";
  120. // int onlineStatus = 1;
  121. // const QString schoolAddress = "";
  122. // const QString schoolName = "schoolName";
  123. // int sex = 0;
  124. // int startTime = 0;
  125. // int status = 1;
  126. // const QString swId = "swId";
  127. // TC::GradesUpdate gradesUpdate(answerFileName,
  128. // checkinNumber,
  129. // endTime,
  130. // examRoom,
  131. // examSessions,
  132. // examText,
  133. // examineNumber,
  134. // groupName,
  135. // name,
  136. // onlineStatus,
  137. // schoolAddress,
  138. // schoolName,
  139. // sex,
  140. // startTime,
  141. // status,
  142. // swId);
  143. // gradesUpdate.postAsync([](const TC::GradesUpdate::Data& data) {
  144. // qDebug() << "Update result:" << data.success << data.message;
  145. // });
  146. // }
  147. TLogin login;
  148. std::unique_ptr<MainWindow> mainWindow = nullptr;
  149. QObject::connect(&login, &TLogin::loginSuccessful, [&]() {
  150. mainWindow = std::make_unique<MainWindow>();
  151. mainWindow->show();
  152. });
  153. login.exec();
  154. if (!mainWindow) {
  155. return 0;
  156. }
  157. // MainWindow w;
  158. // w.show();
  159. a.setActivationWindow(mainWindow.get());
  160. const QString ip = AppEvent::instance()->configValue("serverIP").toString();
  161. const int port = AppEvent::instance()->configValue("serverPort").toInt();
  162. QSettings settings("./server/config/CPPWeb.ini", QSettings::Format::IniFormat);
  163. settings.beginGroup("config");
  164. settings.setValue("host", ip);
  165. settings.setValue("port", port);
  166. server.start(QHostAddress(ip), port);
  167. // return a.exec();
  168. return a.exec();
  169. }