XNSim/XNCore/XNFramework.cpp

254 lines
9.4 KiB
C++
Raw Normal View History

2025-04-28 12:25:20 +08:00
#include "XNFramework.h"
#include "XNFramework_p.h"
#include "XNTimeManager.h"
#include "XNThreadManager.h"
#include "XNScenarioManager.h"
#include "XNDDSManager.h"
#include "XNModelManager.h"
#include "XNServiceManager.h"
#include "XNEventManager.h"
XNFramework::XNFramework(QObject *parent) : XNObject(*new XNFrameworkPrivate(this), parent)
{
setObjectName("XNFramework");
setUniqueId(1);
XNTimeManager *timeManager = new XNTimeManager(this);
XNThreadManager *threadManager = new XNThreadManager(this);
XNScenarioManager *scenarioManager = new XNScenarioManager(this);
XNDDSManager *ddsManager = new XNDDSManager(this);
XNModelManager *modelManager = new XNModelManager(this);
XNServiceManager *serviceManager = new XNServiceManager(this);
XNEventManager *eventManager = new XNEventManager(this);
//链接各组件初始化信号槽,依次链接,回告完成
connect(this, &XNFramework::Initialize, eventManager, &XNEventManager::OnInitialize);
connect(eventManager, &XNEventManager::Initialize, timeManager, &XNTimeManager::OnInitialize);
connect(timeManager, &XNTimeManager::Initialize, ddsManager, &XNDDSManager::OnInitialize);
connect(ddsManager, &XNDDSManager::Initialize, serviceManager, &XNServiceManager::OnInitialize);
connect(serviceManager, &XNServiceManager::Initialize, threadManager,
&XNThreadManager::OnInitialize);
connect(threadManager, &XNThreadManager::Initialize, modelManager,
&XNModelManager::OnInitialize);
connect(modelManager, &XNModelManager::Initialize, scenarioManager,
&XNScenarioManager::OnInitialize);
connect(modelManager, &XNModelManager::InitializeSuccess, this,
&XNFramework::OnInitializeSuccess);
//连接各组件初始化失败信号到框架的槽
connect(eventManager, &XNEventManager::InitializeFailed, this,
&XNFramework::OnInitializeFailed);
connect(timeManager, &XNTimeManager::InitializeFailed, this, &XNFramework::OnInitializeFailed);
connect(ddsManager, &XNDDSManager::InitializeFailed, this, &XNFramework::OnInitializeFailed);
connect(serviceManager, &XNServiceManager::InitializeFailed, this,
&XNFramework::OnInitializeFailed);
connect(threadManager, &XNThreadManager::InitializeFailed, this,
&XNFramework::OnInitializeFailed);
connect(modelManager, &XNModelManager::InitializeFailed, this,
&XNFramework::OnInitializeFailed);
connect(scenarioManager, &XNScenarioManager::InitializeFailed, this,
&XNFramework::OnInitializeFailed);
//连接解析配置文件信号到框架的槽
connect(scenarioManager, &XNScenarioManager::AnalyzeScenarioXmlFailed, this,
&XNFramework::OnAnalyzeScenarioXmlFailed);
connect(scenarioManager, &XNScenarioManager::AnalyzeScenarioXmlSuccess, this,
&XNFramework::OnAnalyzeScenarioXmlSuccess);
//链接各组件准备执行信号槽
connect(this, &XNFramework::PrepareForExecute, eventManager,
&XNEventManager::OnPrepareForExecute);
connect(eventManager, &XNEventManager::PrepareForExecute, timeManager,
&XNTimeManager::OnPrepareForExecute);
connect(timeManager, &XNTimeManager::PrepareForExecute, ddsManager,
&XNDDSManager::OnPrepareForExecute);
connect(ddsManager, &XNDDSManager::PrepareForExecute, serviceManager,
&XNServiceManager::OnPrepareForExecute);
connect(serviceManager, &XNServiceManager::PrepareForExecute, threadManager,
&XNThreadManager::OnPrepareForExecute);
connect(threadManager, &XNThreadManager::PrepareForExecute, modelManager,
&XNModelManager::OnPrepareForExecute);
connect(modelManager, &XNModelManager::PrepareForExecute, scenarioManager,
&XNScenarioManager::OnPrepareForExecute);
connect(modelManager, &XNModelManager::PrepareForExecuteSuccess, this,
&XNFramework::OnPrepareForExecuteSuccess);
//连接准备执行失败的槽
connect(eventManager, &XNEventManager::PrepareForExecuteFailed, this,
&XNFramework::OnPrepareForExecuteFailed);
connect(timeManager, &XNTimeManager::PrepareForExecuteFailed, this,
&XNFramework::OnPrepareForExecuteFailed);
connect(ddsManager, &XNDDSManager::PrepareForExecuteFailed, this,
&XNFramework::OnPrepareForExecuteFailed);
connect(serviceManager, &XNServiceManager::PrepareForExecuteFailed, this,
&XNFramework::OnPrepareForExecuteFailed);
connect(threadManager, &XNThreadManager::PrepareForExecuteFailed, this,
&XNFramework::OnPrepareForExecuteFailed);
connect(modelManager, &XNModelManager::PrepareForExecuteFailed, this,
&XNFramework::OnPrepareForExecuteFailed);
connect(scenarioManager, &XNScenarioManager::PrepareForExecuteFailed, this,
&XNFramework::OnPrepareForExecuteFailed);
//threadManager的设置开始时间信号触发timeManager的设置开始时间槽
connect(threadManager, &XNThreadManager::SetStartTime, timeManager,
&XNTimeManager::OnSetStartTime);
//framework的仿真控制信号触发timeManager的仿真控制槽
connect(this, &XNFramework::SimControl, timeManager, &XNTimeManager::OnSimControl);
//timeManager的仿真控制信号触发threadManager的仿真控制槽
connect(timeManager, &XNTimeManager::SimControl, threadManager, &XNThreadManager::OnSimControl);
//scenarioManager的分析场景XML信号触发framework的分析场景XML槽
connect(this, &XNFramework::AnalyzeScenarioXml, scenarioManager,
&XNScenarioManager::AnalysisScenarioXml);
//scenarioManager的添加线程池信号触发threadManager的添加线程池槽
connect(scenarioManager, &XNScenarioManager::AddThreadPool, threadManager,
&XNThreadManager::OnAddThreadPool);
//scenarioManager的加载模型信号触发modelManager的加载模型槽
connect(scenarioManager, &XNScenarioManager::LoadModel, modelManager,
&XNModelManager::OnLoadModel);
//scenarioManager的加载服务信号触发serviceManager的加载服务槽
connect(scenarioManager, &XNScenarioManager::LoadService, serviceManager,
&XNServiceManager::OnLoadService);
//scenarioManager的设置工作路径信号触发framework的设置工作路径槽
connect(scenarioManager, &XNScenarioManager::SetWorkPath, this, &XNFramework::SetWorkPath);
//scenarioManager的设置模型路径信号触发framework的设置模型路径槽
connect(scenarioManager, &XNScenarioManager::SetModelPath, this, &XNFramework::SetModelPath);
//scenarioManager的设置服务路径信号触发framework的设置服务路径槽
connect(scenarioManager, &XNScenarioManager::SetServicePath, this,
&XNFramework::SetServicePath);
//scenarioManager的设置CPU亲和性信号触发framework的设置CPU亲和性槽
connect(scenarioManager, &XNScenarioManager::SetCpuAffinity, this,
&XNFramework::SetCpuAffinity);
//scenarioManager的设置基频信号触发threadManager的设置基频槽
connect(scenarioManager, &XNScenarioManager::SetBaseFreq, threadManager,
&XNThreadManager::OnSetBaseFreq);
//scenarioManager的设置基频信号触发modelManager的设置基频槽
connect(scenarioManager, &XNScenarioManager::SetBaseFreq, modelManager,
&XNModelManager::OnSetBaseFreq);
//modelManager的注册函数信号触发threadManager的注册函数槽
connect(modelManager, &XNModelManager::RegisterFunction, threadManager,
&XNThreadManager::OnRegisterFunction);
//scenarioManager的设置DDS域ID信号触发ddsManager的设置DDS域ID槽
connect(scenarioManager, &XNScenarioManager::SetDomainID, ddsManager,
&XNDDSManager::SetDomainID);
}
XNFramework::XNFramework(XNFrameworkPrivate &dd, QObject *parent) : XNObject(dd, parent)
{
}
XNFramework::~XNFramework()
{
}
QString XNFramework::GetWorkPath()
{
Q_D(XNFramework);
return d->workPath;
}
void XNFramework::SetWorkPath(const QString &workPath)
{
Q_D(XNFramework);
d->workPath = workPath;
}
QString XNFramework::GetModelPath()
{
Q_D(XNFramework);
return d->modelPath;
}
void XNFramework::SetModelPath(const QString &modelPath)
{
Q_D(XNFramework);
d->modelPath = modelPath;
}
QString XNFramework::GetServicePath()
{
Q_D(XNFramework);
return d->servicePath;
}
void XNFramework::SetServicePath(const QString &servicePath)
{
Q_D(XNFramework);
d->servicePath = servicePath;
}
quint32 XNFramework::GetCpuAffinity()
{
Q_D(XNFramework);
return d->uCpuAffinity;
}
void XNFramework::SetCpuAffinity(quint32 cpuAffinity)
{
Q_D(XNFramework);
d->uCpuAffinity = cpuAffinity;
}
void XNFramework::OnInitialize()
{
Q_D(XNFramework);
LOG_INFO("XNFramework Initialize ...");
emit Initialize();
}
void XNFramework::OnPrepareForExecute()
{
Q_D(XNFramework);
emit PrepareForExecute();
}
void XNFramework::SetScenarioXml(const QString &scenarioXml)
{
Q_D(XNFramework);
d->scenarioXml = scenarioXml;
}
void XNFramework::OnInitializeSuccess()
{
Q_D(XNFramework);
LOG_INFO("XNFramework Initialize Success!");
LOG_INFO("XNFramework Analyze Scenario Xml ...");
emit AnalyzeScenarioXml(d->scenarioXml);
}
void XNFramework::OnInitializeFailed()
{
LOG_INFO("XNFramework Initialize Failed!");
emit InitializeSuccess(false);
}
void XNFramework::OnAnalyzeScenarioXmlSuccess()
{
LOG_INFO("XNFramework Analyze Scenario Xml Success!");
emit InitializeSuccess(true);
}
void XNFramework::OnAnalyzeScenarioXmlFailed()
{
LOG_INFO("XNFramework Analyze Scenario Xml Failed!");
emit InitializeSuccess(false);
}
void XNFramework::OnPrepareForExecuteSuccess()
{
Q_D(XNFramework);
LOG_INFO("XNCore is prepared for execute! Simulation will start soon...");
emit PrepareForExecuteSuccess(true);
}
void XNFramework::OnPrepareForExecuteFailed()
{
Q_D(XNFramework);
LOG_INFO("XNCore is failed to prepared for execute!");
emit PrepareForExecuteSuccess(false);
}
void XNFramework::OnSimControl(quint32 objectId, SimControlCmd cmd)
{
emit SimControl(objectId, cmd);
}