main.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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 "tmodel.h"
  15. #include "websocketserver.h"
  16. #include "qtsingleapplication.h"
  17. void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
  18. {
  19. QString txt;
  20. switch (type) {
  21. case QtDebugMsg:
  22. txt = QString("Debug: %1").arg(msg);
  23. break;
  24. case QtInfoMsg:
  25. txt = QString("Info: %1").arg(msg);
  26. break;
  27. case QtWarningMsg:
  28. txt = QString("Warning: %1").arg(msg);
  29. break;
  30. case QtCriticalMsg:
  31. txt = QString("Critical: %1").arg(msg);
  32. break;
  33. case QtFatalMsg:
  34. txt = QString("Fatal: %1").arg(msg);
  35. break;
  36. }
  37. QFile outFile("log.txt");
  38. outFile.open(QIODevice::WriteOnly | QIODevice::Append);
  39. QTextStream ts(&outFile);
  40. ts << QDateTime::currentDateTime().toString(Qt::ISODate) << " " << txt << " (" << context.file
  41. << ":" << context.line << ")" << Qt::endl;
  42. }
  43. CWF::SqlDatabaseStorage storage("QSQLITE", "localhost", "data.db", "", "");
  44. //中间件 做 jwt 校验等处理
  45. class MiddlewareFilter : public CWF::Filter
  46. {
  47. public:
  48. void doFilter(CWF::Request &request, CWF::Response &response, CWF::FilterChain &chain) override
  49. {
  50. const CWF::HttpParser &httpParser = request.getHttpParser();
  51. const QByteArray websocket = httpParser.getHeaderField("Upgrade");
  52. if (websocket.isEmpty()) {
  53. chain.doFilter(request, response);
  54. } else {
  55. }
  56. }
  57. };
  58. int main(int argc, char *argv[])
  59. {
  60. // QApplication a(argc, argv);
  61. SharedTools::QtSingleApplication a("teacher server", argc, argv);
  62. if (a.isRunning()) {
  63. a.sendMessage("", 1000);
  64. return 0;
  65. }
  66. QObject::connect(&a,
  67. &SharedTools::QtSingleApplication::messageReceived,
  68. &a,
  69. &SharedTools::QtSingleApplication::activateWindow);
  70. QCoreApplication::setApplicationName("teacher server");
  71. QCoreApplication::setApplicationVersion("1.0");
  72. QCommandLineParser parser;
  73. parser.addHelpOption();
  74. parser.addVersionOption();
  75. QCommandLineOption debugOption("debug", "Enable debug mode");
  76. parser.addOption(debugOption);
  77. parser.process(a);
  78. if (parser.isSet(debugOption)) {
  79. qInstallMessageHandler(customMessageHandler);
  80. }
  81. AppEvent::instance()->configLoad();
  82. WebSocketServer::getInstance();
  83. QTranslator translator;
  84. const QStringList uiLanguages = QLocale::system().uiLanguages();
  85. for (const QString &locale : uiLanguages) {
  86. const QString baseName = "teacherServer_" + QLocale(locale).name();
  87. if (translator.load(":/i18n/" + baseName)) {
  88. a.installTranslator(&translator);
  89. break;
  90. }
  91. }
  92. UserModel{storage}.updateDB();
  93. ExamsQuestionModel{storage}.updateDB();
  94. ExamsTestModel{storage}.updateDB();
  95. MiddlewareFilter middlewareFilter;
  96. CWF::CppWebApplication server("/server", &middlewareFilter);
  97. server.addController<HelloController>("/hello");
  98. server.addController<ConfigController>("/api/v1/config");
  99. server.addController<LoginController>("/api/v1/user/login");
  100. server.addController<UserInfoController>("/api/v1/user/userInfo");
  101. server.addController<LoginOutController>("/api/v1/user/loginOut");
  102. server.addController<ExamsController>("/api/v1/exams/content");
  103. server.addController<ExamsFilesController>("/api/v1/exams/files");
  104. server.addController<UploadedFilesController>("/api/v1/exams/uploaded");
  105. server.addController<ExamsAnswerTimeController>("/api/v1/exams/answerTime");
  106. server.addController<TableDataController>("/api/v1/tableData");
  107. server.addController<TableDataExamRoomController>("/api/v1/tableDataRoom");
  108. MainWindow w;
  109. w.show();
  110. a.setActivationWindow(&w);
  111. const QString ip = AppEvent::instance()->configValue("serverIP").toString();
  112. const int port = AppEvent::instance()->configValue("serverPort").toInt();
  113. QSettings settings("./server/config/CPPWeb.ini", QSettings::Format::IniFormat);
  114. settings.beginGroup("config");
  115. settings.setValue("host", ip);
  116. settings.setValue("port", port);
  117. server.start(QHostAddress(ip), port);
  118. return a.exec();
  119. }