Added new AllPluginsLoaded callback

--HG--
extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%4019
This commit is contained in:
David Anderson 2005-04-18 18:21:57 +00:00
parent 096dfb6a6f
commit ddb34f91ea
4 changed files with 37 additions and 2 deletions

View File

@ -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;
}

View File

@ -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;
};
};

View File

@ -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

View File

@ -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;