58 lines
1.1 KiB
C++
58 lines
1.1 KiB
C++
#include "ModuleInstance.h"
|
|
|
|
#include <mutex>
|
|
#include <thread>
|
|
|
|
#include "Core/CoreCallBacks.h"
|
|
|
|
extern ModuleInstance* Factory();
|
|
|
|
static std::mutex mModuleInstance;
|
|
static ModuleInstance* module = nullptr;
|
|
static std::thread* moduleThread;
|
|
// Don't free. It's memory free in core
|
|
static CoreCallBacks* callbacks_;
|
|
|
|
void ModuleInstance::start()
|
|
{
|
|
}
|
|
|
|
void ModuleInstance::stop()
|
|
{
|
|
onStop.Call();
|
|
}
|
|
|
|
void ModuleInstance::QuitGame()
|
|
{
|
|
callbacks_->Quit();
|
|
}
|
|
|
|
void InitModule(CoreCallBacks* callbacks)
|
|
{
|
|
std::lock_guard<std::mutex> lock(mModuleInstance);
|
|
callbacks_ = callbacks;
|
|
if(module == nullptr)
|
|
module = Factory();
|
|
}
|
|
|
|
void StartModule()
|
|
{
|
|
std::lock_guard<std::mutex> lock(mModuleInstance);
|
|
if (module != nullptr)
|
|
moduleThread = new std::thread(&ModuleInstance::start, module);
|
|
}
|
|
|
|
void QuitModule()
|
|
{
|
|
std::lock_guard<std::mutex> lock(mModuleInstance);
|
|
if(module != nullptr)
|
|
{
|
|
module->stop();
|
|
moduleThread->join();
|
|
delete module;
|
|
module = nullptr;
|
|
delete moduleThread;
|
|
moduleThread = nullptr;
|
|
}
|
|
}
|