| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- #include "..\..\common_h\coremanager.h"
- #include "core.h"
- #include "MemoryManager.h"
- //-------------------------------------------------------------------------------------------------
- ICore * api = null;
- StormEngine_Declarator * StormEngine_Declarator::first = null;
- CoreSystemLogReciver * reciver = null;
- extern MemoryManager memoryManager;
- //-------------------------------------------------------------------------------------------------
- __forceinline void * _cdecl operator new(size_t size, const char * fileName, long fileLine, const char * coreCreate)
- {
- Assert(strcmp(coreCreate, "CoreCreate") == 0);
- api = (ICore *)memoryManager.Reallocate(null, (dword)size, fileName, fileLine);
- return api;
- }
- __forceinline void _cdecl operator delete(void * ptr, const char * fileName, long fileLine, const char * coreCreate)
- {
- Assert(false);
- return memoryManager.Free(ptr, fileName, fileLine);
- }
- class CoreManagerImp : public CoreManager
- {
- public:
- virtual ~CoreManagerImp()
- {
- };
- //Создать
- virtual void CreateCore(CoreSystemLogReciver * _reciver, const char * coreModuleNameForSkip)
- {
- if(!api)
- {
- reciver = _reciver;
- new(_FL_, "CoreCreate") Core(coreModuleNameForSkip);
- Assert(api);
- }
- };
- //Удалить
- virtual void DeleteCore()
- {
- if(api)
- {
- //Удаляем ядро
- ((Core *)api)->~Core();
- memoryManager.Free(api, _FL_);
- api = null;
- //Освобождаем оставшиюся память и выводим сообщения
- memoryManager.ReleaseMemory(true);
- }
- };
- //Загрузить модули быстрого старта
- virtual bool LoadQuickStartModules(const char * quickModules)
- {
- if(api)
- {
- return ((Core *)api)->LoadQuickStartModules(quickModules);
- }
- return false;
- }
- //Загрузить модули невошедшие в список быстрого старта
- virtual void LoadModules()
- {
- if(api)
- {
- ((Core *)api)->LoadModules();
- }
- }
- //Обновить
- virtual void FrameUpdate()
- {
- if(api)
- {
- ((Core *)api)->Update();
- }
- };
- //Получить указатель
- virtual ICore * GetCore()
- {
- return api;
- };
- //Активно ли ядро
- virtual void SetActive(bool isActive)
- {
- ((Core *)api)->SetActive(isActive);
- }
- //Завершить работу приложения
- virtual bool IsExit()
- {
- if(api)
- {
- return ((Core *)api)->IsExit();
- }
- return true;
- }
- //Создать зарегистрированные сервисы (повторно созданные не создаёт)
- virtual bool CreateAllServices()
- {
- if(!api) return false;
- return ((Core *)api)->CreateAllServices();
- }
- //Создать сервис
- virtual bool CreateCoreService(const char * service_name)
- {
-
- return api->GetService(service_name) != null;
- }
- //Создать объект
- virtual bool CreateObject(const char * className)
- {
- if(!api) return false;
- return api->CreateObject(className) != null;
- }
- //Установить числовую целочисленную переменную
- virtual void SetVarInt(const char * name, long v)
- {
- if(api) api->Storage().SetLong(name, v);
- }
- //Получить числовую целочисленную переменную
- virtual long GetVarInt(const char * name, long def, bool * res)
- {
- if(!api)
- {
- if(res) *res = false;
- return def;
- }
- return api->Storage().GetLong(name, def, res);
- }
- //Установить числовую переменную
- virtual void SetVarDouble(const char * name, double v)
- {
- if(api) api->Storage().SetFloat(name, (float)v);
- }
- //Получить числовую переменную
- virtual double GetVarDouble(const char * name, double def, bool * res)
- {
- if(!api)
- {
- if(res) *res = false;
- return def;
- }
- return api->Storage().GetFloat(name, (float)def, res);
- }
- //Утановить строковую переменную
- virtual void SetVarString(const char * name, const char * v)
- {
- if(api) api->Storage().SetString(name, v);
- }
- //Получить строковую переменную
- virtual const char * GetVarString(const char * name, const char * def, bool * res)
- {
- if(!api)
- {
- if(res) *res = false;
- return def;
- }
- return api->Storage().GetString(name, def, res);
- }
- CoreState TranslateState(CoreManagerCoreState state)
- {
- switch(state)
- {
- case cmcorestate_trace: return corestate_trace;
- case cmcorestate_debugkeys: return corestate_debugkeys;
- case cmcorestate_memcheck: return corestate_memcheck;
- case cmcorestate_panicmemcheck: return corestate_panicmemcheck;
- case cmcorestate_memorypools: return corestate_mempools;
- case cmcorestate_mtmanual: return corestate_mtmanual;
- case cmcorestate_lorestimer: return corestate_lorestimer;
- case cmcorestate_fixedfps: return corestate_fixedfps;
- }
- return corestate_none;
- }
- //Включить-выключить стейт ядра
- virtual void SetState(CoreManagerCoreState state, long value)
- {
- if(!api) return;
- api->ExecuteCoreCommand(CoreCommand_StateOp(ccid_setstate, TranslateState(state), value));
- }
- //Получить стейт ядра
- virtual long GetState(CoreManagerCoreState state)
- {
- if(!api) return false;
- CoreCommand_StateOp cmd(ccid_getstate, TranslateState(state), false);
- api->ExecuteCoreCommand(cmd);
- return cmd.value;
- }
- //Добавить сообщение в буфер сообщений ядра (при количестве параметров == 0 сообщение пропускается)
- virtual void AddSystemMessage(const char * id, const void * data, unsigned long size)
- {
- if(api)
- {
- ((Core *)api)->AddSystemMessage(id, (const unsigned char *)data, size);
- }
- }
- //Вывести сообщение в системный лог
- virtual void _cdecl Trace(const char * format, ...)
- {
- CoreLogOutData(format, (&format) + 1);
- }
- };
- //------------------------------------------------------------------------------------------------
- //Вывод в лог
- //------------------------------------------------------------------------------------------------
- char coreLogOutDataBuffer[16384];
- bool core_isEnableTrace = true; //Разрешён ли вывод в лог
- void CoreLogOutData(const char * format, const void * data)
- {
- if(api) ((Core *)api)->SetWatchDog();
- if(!reciver || !core_isEnableTrace) return;
- crt_vsnprintf(coreLogOutDataBuffer, ARRSIZE(coreLogOutDataBuffer) - 4, format, (va_list)data);
- coreLogOutDataBuffer[ARRSIZE(coreLogOutDataBuffer) - 4] = 0;
- crt_strcat(coreLogOutDataBuffer, 16383, "\r\n");
- reciver->Out(coreLogOutDataBuffer);
- }
- //Мэнеджер ядра
- CoreManagerImp coreManager;
- //------------------------------------------------------------------------------------------------
- //Экспорк в dll
- //------------------------------------------------------------------------------------------------
- #ifdef _USRDLL
- extern "C"
- {
- void __declspec(dllexport) _cdecl StormEngine_GetCoreManager(CoreManager * & pointerToCoreManager)
- {
- pointerToCoreManager = &coreManager;
- }
- };
- #else
- CoreManager * _cdecl StormEngine_GetCoreManager()
- {
- return &coreManager;
- }
- #endif
|