mirror of
https://github.com/alliedmodders/metamod-source.git
synced 2025-12-07 02:18:30 +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()
|
CPluginManager::CPluginManager()
|
||||||
{
|
{
|
||||||
m_LastId = Pl_MinId;
|
m_LastId = Pl_MinId;
|
||||||
|
m_AllLoaded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPluginManager::~CPluginManager()
|
CPluginManager::~CPluginManager()
|
||||||
@ -84,6 +85,24 @@ CPluginManager::CPlugin *CPluginManager::FindById(PluginId id)
|
|||||||
return NULL;
|
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)
|
bool CPluginManager::Pause(PluginId id, char *error, size_t maxlen)
|
||||||
{
|
{
|
||||||
CPlugin *pl = FindById(id);
|
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))
|
if (pl->m_API->Load(pl->m_Id, static_cast<ISmmAPI *>(&g_SmmAPI), &(pl->fac_list), error, maxlen))
|
||||||
{
|
{
|
||||||
pl->m_Status = Pl_Running;
|
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 {
|
} else {
|
||||||
pl->m_Status = Pl_Refused;
|
pl->m_Status = Pl_Refused;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,6 +47,7 @@ namespace SourceMM
|
|||||||
public:
|
public:
|
||||||
CPluginManager();
|
CPluginManager();
|
||||||
~CPluginManager();
|
~CPluginManager();
|
||||||
|
void SetAllLoaded();
|
||||||
public:
|
public:
|
||||||
PluginId Load(const char *file, PluginId source, bool &already, char *error, size_t maxlen);
|
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);
|
bool Unload(PluginId id, bool force, char *error, size_t maxlen);
|
||||||
@ -76,6 +77,7 @@ namespace SourceMM
|
|||||||
private:
|
private:
|
||||||
PluginId m_LastId;
|
PluginId m_LastId;
|
||||||
std::list<CPlugin *> m_Plugins;
|
std::list<CPlugin *> m_Plugins;
|
||||||
|
bool m_AllLoaded;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
#include <sourcehook/sourcehook.h>
|
#include <sourcehook/sourcehook.h>
|
||||||
#include "ISmmAPI.h"
|
#include "ISmmAPI.h"
|
||||||
|
|
||||||
#define PLAPI_VERSION 003
|
#define PLAPI_VERSION 004
|
||||||
#define PLAPI_NAME "ISmmPlugin"
|
#define PLAPI_NAME "ISmmPlugin"
|
||||||
|
|
||||||
struct factories
|
struct factories
|
||||||
@ -83,6 +83,11 @@ public:
|
|||||||
virtual const char *GetVersion() =0;
|
virtual const char *GetVersion() =0;
|
||||||
virtual const char *GetDate() =0;
|
virtual const char *GetDate() =0;
|
||||||
virtual const char *GetLogTag() =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
|
#define PL_EXPOSURE CreateInterface
|
||||||
|
|||||||
@ -229,6 +229,9 @@ bool CServerGameDLL::DLLInit(CreateInterfaceFn engineFactory, CreateInterfaceFn
|
|||||||
|
|
||||||
LoadPluginsFromFile(full_path);
|
LoadPluginsFromFile(full_path);
|
||||||
|
|
||||||
|
//All plugins are now loaded.
|
||||||
|
g_PluginMngr.SetAllLoaded();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -251,7 +254,7 @@ bool CServerGameDLL::DLLInit(CreateInterfaceFn engineFactory, CreateInterfaceFn
|
|||||||
if (fdwReason == DLL_PROCESS_DETACH)
|
if (fdwReason == DLL_PROCESS_DETACH)
|
||||||
{
|
{
|
||||||
if (g_GameDll.lib && g_GameDll.loaded)
|
if (g_GameDll.lib && g_GameDll.loaded)
|
||||||
//dlclose(g_GameDll.lib);
|
dlclose(g_GameDll.lib);
|
||||||
memset(&g_GameDll, 0, sizeof(GameDllInfo));
|
memset(&g_GameDll, 0, sizeof(GameDllInfo));
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user