mirror of
https://github.com/alliedmodders/metamod-source.git
synced 2025-12-06 18:08:31 +00:00
Added new AllPluginsLoaded callback
--HG-- extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%4019
This commit is contained in:
parent
096dfb6a6f
commit
ddb34f91ea
@ -24,6 +24,7 @@ CPluginManager g_PluginMngr;
|
||||
CPluginManager::CPluginManager()
|
||||
{
|
||||
m_LastId = Pl_MinId;
|
||||
m_AllLoaded = false;
|
||||
}
|
||||
|
||||
CPluginManager::~CPluginManager()
|
||||
@ -84,6 +85,24 @@ CPluginManager::CPlugin *CPluginManager::FindById(PluginId id)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CPluginManager::SetAllLoaded()
|
||||
{
|
||||
m_AllLoaded = true;
|
||||
PluginIter i;
|
||||
|
||||
for (i=m_Plugins.begin(); i!=m_Plugins.end(); i++)
|
||||
{
|
||||
if ( (*i) && (*i)->m_Status == Pl_Running && (*i)->m_API )
|
||||
{
|
||||
//004 is when we added this callback
|
||||
if ( (*i)->m_API->GetApiVersion() < 004 )
|
||||
{
|
||||
(*i)->m_API->AllPluginsLoaded();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CPluginManager::Pause(PluginId id, char *error, size_t maxlen)
|
||||
{
|
||||
CPlugin *pl = FindById(id);
|
||||
@ -179,6 +198,12 @@ CPluginManager::CPlugin *CPluginManager::_Load(const char *file, PluginId source
|
||||
if (pl->m_API->Load(pl->m_Id, static_cast<ISmmAPI *>(&g_SmmAPI), &(pl->fac_list), error, maxlen))
|
||||
{
|
||||
pl->m_Status = Pl_Running;
|
||||
if (m_AllLoaded)
|
||||
{
|
||||
//API 004 is when we added this callback
|
||||
if (pl->m_API->GetApiVersion() >= 4)
|
||||
pl->m_API->AllPluginsLoaded();
|
||||
}
|
||||
} else {
|
||||
pl->m_Status = Pl_Refused;
|
||||
}
|
||||
|
||||
@ -47,6 +47,7 @@ namespace SourceMM
|
||||
public:
|
||||
CPluginManager();
|
||||
~CPluginManager();
|
||||
void SetAllLoaded();
|
||||
public:
|
||||
PluginId Load(const char *file, PluginId source, bool &already, char *error, size_t maxlen);
|
||||
bool Unload(PluginId id, bool force, char *error, size_t maxlen);
|
||||
@ -76,6 +77,7 @@ namespace SourceMM
|
||||
private:
|
||||
PluginId m_LastId;
|
||||
std::list<CPlugin *> m_Plugins;
|
||||
bool m_AllLoaded;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
#include <sourcehook/sourcehook.h>
|
||||
#include "ISmmAPI.h"
|
||||
|
||||
#define PLAPI_VERSION 003
|
||||
#define PLAPI_VERSION 004
|
||||
#define PLAPI_NAME "ISmmPlugin"
|
||||
|
||||
struct factories
|
||||
@ -83,6 +83,11 @@ public:
|
||||
virtual const char *GetVersion() =0;
|
||||
virtual const char *GetDate() =0;
|
||||
virtual const char *GetLogTag() =0;
|
||||
public:
|
||||
/**
|
||||
* @brief Called when all plugins have been loaded - API version 4
|
||||
*/
|
||||
virtual void AllPluginsLoaded() =0;
|
||||
};
|
||||
|
||||
#define PL_EXPOSURE CreateInterface
|
||||
|
||||
@ -229,6 +229,9 @@ bool CServerGameDLL::DLLInit(CreateInterfaceFn engineFactory, CreateInterfaceFn
|
||||
|
||||
LoadPluginsFromFile(full_path);
|
||||
|
||||
//All plugins are now loaded.
|
||||
g_PluginMngr.SetAllLoaded();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -251,7 +254,7 @@ bool CServerGameDLL::DLLInit(CreateInterfaceFn engineFactory, CreateInterfaceFn
|
||||
if (fdwReason == DLL_PROCESS_DETACH)
|
||||
{
|
||||
if (g_GameDll.lib && g_GameDll.loaded)
|
||||
//dlclose(g_GameDll.lib);
|
||||
dlclose(g_GameDll.lib);
|
||||
memset(&g_GameDll, 0, sizeof(GameDllInfo));
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user