XNSim/XNCore_Win/XNFramework/XNFramework.cpp

213 lines
5.4 KiB
C++
Raw Normal View History

2025-07-19 12:44:06 +08:00
#include "XNFramework.h"
#include "XNFramework_p.h"
#include "XNConfigManager/XNConfigManager.h"
#include "XNDDSManager/XNDDSManager.h"
#include "XNEventManager/XNEventManager.h"
#include "XNModelManager/XNModelManager.h"
#include "XNServiceManager/XNServiceManager.h"
#include "XNThreadManager/XNThreadManager.h"
#include "XNTimeManager/XNTimeManager.h"
namespace XNSim {
XNFramework::XNFramework() : XNObject(new XNFrameworkPrivate()) {
SetObjectName("XNFramework");
SetUniqueId(1);
T_D();
d->timeManager = std::make_shared<XNTimeManager>();
d->threadManager = std::make_shared<XNThreadManager>();
d->configManager = std::make_shared<XNConfigManager>();
d->ddsManager = std::make_shared<XNDDSManager>();
d->modelManager = std::make_shared<XNModelManager>();
d->serviceManager = std::make_shared<XNServiceManager>();
d->eventManager = std::make_shared<XNEventManager>();
}
XNFramework::XNFramework(PrivateType *p) : XNObject(p) {}
XNFramework::~XNFramework() {}
XN_STRING XNFramework::GetWorkPath() {
T_D();
return d->workPath;
}
void XNFramework::SetWorkPath(const XN_STRING &workPath) {
T_D();
d->workPath = workPath;
}
XN_STRING XNFramework::GetModelPath() {
T_D();
return d->modelPath;
}
void XNFramework::SetModelPath(const XN_STRING &modelPath) {
T_D();
d->modelPath = modelPath;
}
XN_STRING XNFramework::GetServicePath() {
T_D();
return d->servicePath;
}
void XNFramework::SetServicePath(const XN_STRING &servicePath) {
T_D();
d->servicePath = servicePath;
}
XN_UINT32 XNFramework::GetCpuAffinity() {
T_D();
return d->uCpuAffinity;
}
void XNFramework::SetCpuAffinity(XN_UINT32 cpuAffinity) {
T_D();
d->uCpuAffinity = cpuAffinity;
}
XN_BOOL XNFramework::Initialize(XN_UINT32 initialType) {
T_D();
LOG_INFO("D01054001主框架正在初始化...");
d->ddsManager->SetFramework(XN_THISPTR);
d->timeManager->SetFramework(XN_THISPTR);
d->threadManager->SetFramework(XN_THISPTR);
d->configManager->SetFramework(XN_THISPTR);
d->modelManager->SetFramework(XN_THISPTR);
d->serviceManager->SetFramework(XN_THISPTR);
d->eventManager->SetFramework(XN_THISPTR);
XN_BOOL ret = d->eventManager->Initialize();
if (!ret) {
LOG_ERROR("B01052001主框架初始化失败");
return false;
}
ret = d->timeManager->Initialize();
if (!ret) {
LOG_ERROR("B01052002主框架初始化失败");
return false;
}
ret = d->ddsManager->Initialize();
if (!ret) {
LOG_ERROR("B01052003主框架初始化失败");
return false;
}
ret = d->serviceManager->Initialize();
if (!ret) {
LOG_ERROR("B01052004主框架初始化失败");
return false;
}
ret = d->threadManager->Initialize();
if (!ret) {
LOG_ERROR("B01052005主框架初始化失败");
return false;
}
ret = d->modelManager->Initialize();
if (!ret) {
LOG_ERROR("B01052006主框架初始化失败");
return false;
}
ret = d->configManager->Initialize();
if (!ret) {
LOG_ERROR("B01052007主框架初始化失败");
return false;
}
LOG_INFO("D01054002主框架初始化成功");
LOG_INFO("D01054003开始解析构型文件 ...");
ret = d->configManager->AnalysisScenarioXml(d->scenarioXml, initialType);
if (!ret) {
LOG_ERROR("B01052008主框架解析构型文件失败");
return false;
}
LOG_INFO("D01054004解析构型文件成功");
return true;
}
XN_BOOL XNFramework::PrepareForExecute() {
T_D();
XN_BOOL ret = d->eventManager->PrepareForExecute();
if (!ret) {
LOG_ERROR("XNFramework PrepareForExecute Failed!");
return false;
}
ret = d->timeManager->PrepareForExecute();
if (!ret) {
LOG_ERROR("XNFramework PrepareForExecute Failed!");
return false;
}
ret = d->ddsManager->PrepareForExecute();
if (!ret) {
LOG_ERROR("XNFramework PrepareForExecute Failed!");
return false;
}
ret = d->serviceManager->PrepareForExecute();
if (!ret) {
LOG_ERROR("XNFramework PrepareForExecute Failed!");
return false;
}
ret = d->threadManager->PrepareForExecute();
if (!ret) {
LOG_ERROR("XNFramework PrepareForExecute Failed!");
return false;
}
ret = d->modelManager->PrepareForExecute();
if (!ret) {
LOG_ERROR("XNFramework PrepareForExecute Failed!");
return false;
}
ret = d->configManager->PrepareForExecute();
if (!ret) {
LOG_ERROR("XNFramework PrepareForExecute Failed!");
return false;
}
LOG_INFO("XNCore is prepared for execute! Simulation will start soon...");
return true;
}
void XNFramework::SetScenarioXml(const XN_STRING &scenarioXml) {
T_D();
d->scenarioXml = scenarioXml;
}
void XNFramework::SimControl(XN_UINT32 objectId, SimControlCmd cmd) {
T_D();
d->timeManager->SimControl(objectId, cmd);
d->threadManager->SimControl(objectId, cmd);
}
XNTimeManagerPtr XNFramework::GetTimeManager() {
T_D();
return d->timeManager;
}
XNThreadManagerPtr XNFramework::GetThreadManager() {
T_D();
return d->threadManager;
}
XNConfigManagerPtr XNFramework::GetConfigManager() {
T_D();
return d->configManager;
}
XNDDSManagerPtr XNFramework::GetDDSManager() {
T_D();
return d->ddsManager;
}
XNEventManagerPtr XNFramework::GetEventManager() {
T_D();
return d->eventManager;
}
XNModelManagerPtr XNFramework::GetModelManager() {
T_D();
return d->modelManager;
}
XNServiceManagerPtr XNFramework::GetServiceManager() {
T_D();
return d->serviceManager;
}
} // namespace XNSim