105 lines
3.4 KiB
C++
Raw Normal View History

2026-03-28 10:49:55 +08:00
#include <iostream>
#include <QCoreApplication>
#include <chrono>
#include <thread>
2026-03-28 10:49:55 +08:00
#include "BeltTearingPresenter.h"
#include "PathManager.h"
#include "version.h"
#include "beltTearingDetection_Export.h"
#include "IVrUtils.h"
#include "VrLog.h"
#include "Version.h"
#include "VrError.h"
#include "AuthManager.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
2026-03-28 10:49:55 +08:00
// 设置应用程序信息
app.setApplicationName(BELTTEARING_PRODUCT_NAME);
app.setApplicationVersion(BELTTEARING_VERSION_STRING);
app.setOrganizationName(BELTTEARING_COMPANY_NAME);
2026-03-28 10:49:55 +08:00
VrLogUtils::InitLog();
VrLogUtils::EnableTime(false);
// 打印启动横幅
LOG_DEBUG("===========================================\n");
LOG_INFO(" %s\n", BELTTEARING_PRODUCT_NAME);
LOG_INFO(" %s\n", BELTTEARING_DESCRIPTION);
LOG_INFO(" %s\n", BELTTEARING_COPYRIGHT);
2026-03-28 10:49:55 +08:00
LOG_DEBUG("===========================================\n");
// 授权检查
if (!AuthManager::CheckLicenseValid()) {
LOG_ERROR("授权验证失败,程序退出\n");
LOG_ERROR("请联系供应商获取授权码\n");
LOG_ERROR("机器码: %s\n", AuthManager::GetMachineCode().c_str());
return ERR_CODE(DEV_UNACTIVATE);
}
// 创建并初始化Presenter
BeltTearingPresenter presenter;
// 获取配置文件路径
QString configFilePath = PathManager::GetConfigFilePath();
// 加载配置文件
if (!presenter.loadConfiguration(configFilePath)) {
LOG_WARN("Warning: Failed to load configuration file. Using default settings.\n");
LOG_INFO("Config file location: %s\n", configFilePath.toStdString().c_str());
}
// 启动TCP服务器(使用配置文件中的端口,如果配置加载失败则使用默认端口)
quint16 serverPort = presenter.getServerPort();
if (serverPort == 0) {
serverPort = 5900; // 默认端口
}
if (!presenter.startServer(serverPort)) {
LOG_ERROR("Failed to start server on port %d\n", serverPort);
return ERR_CODE(DEV_NO_OPEN);
}
// 启动相机
int cameraResult = presenter.startCamera();
if (cameraResult != 0) {
LOG_ERROR("Failed to start camera, error code: %d\n", cameraResult);
// 继续启动服务器,但记录错误
}
// 设置版本信息文本:版本号 + 编译时间
QString versionText = QString("%1_%2_%3")
.arg(BELTTEARING_VERSION_STRING)
.arg(BELTTEARING_VERSION_BUILD)
2026-03-28 10:49:55 +08:00
.arg(BUILD_TIME.c_str());
// 输出系统信息
LOG_INFO("=== BeltTearing Server Started %s===\n", versionText.toStdString().c_str());
LOG_INFO("Server is running on port %d\n", serverPort);
LOG_INFO("Press Ctrl+C to exit.\n");
#if 1
#ifdef _WIN32
LOG_INFO("Simulation thread started - sending test data every 5 seconds\n");
// 处理应用程序退出
std::thread testThread([&presenter]() {
std::this_thread::sleep_for(std::chrono::seconds(5));
// while (true)
2026-03-28 10:49:55 +08:00
{
presenter.sendTestData("D:\\Project\\wood\\GrabBag\\TestData\\beltTearing\\LaserData\\2026-10-23-10-45-34_LaserData_Ik012067.txt");
// presenter.sendSimulationData(); // 启用发送模拟撕裂数据
std::this_thread::sleep_for(std::chrono::seconds(1)); // 等待1秒
2026-03-28 10:49:55 +08:00
}
});
testThread.detach();
#endif
#endif
return app.exec();
}