254 lines
9.4 KiB
C++
Executable File
254 lines
9.4 KiB
C++
Executable File
#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);
|
|
}
|