#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); }