changed how the admin cache is rebuilt
renamed the plugin and fixed compilation errors --HG-- rename : plugins/admin-flatfile/admin-base.sp => plugins/admin-flatfile/admin-flatfile.sp extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40444
This commit is contained in:
parent
0186e26344
commit
8860ff6224
@ -35,11 +35,12 @@ AdminCache::AdminCache()
|
|||||||
|
|
||||||
AdminCache::~AdminCache()
|
AdminCache::~AdminCache()
|
||||||
{
|
{
|
||||||
|
DumpAdminCache(AdminCache_Overrides, false);
|
||||||
|
DumpAdminCache(AdminCache_Groups, false);
|
||||||
|
|
||||||
sm_trie_destroy(m_pCmdGrpOverrides);
|
sm_trie_destroy(m_pCmdGrpOverrides);
|
||||||
sm_trie_destroy(m_pCmdOverrides);
|
sm_trie_destroy(m_pCmdOverrides);
|
||||||
|
|
||||||
DumpAdminCache(0xFFFFFFFF, false);
|
|
||||||
|
|
||||||
if (m_pGroups)
|
if (m_pGroups)
|
||||||
{
|
{
|
||||||
sm_trie_destroy(m_pGroups);
|
sm_trie_destroy(m_pGroups);
|
||||||
@ -759,39 +760,52 @@ void AdminCache::InvalidateAdminCache(bool unlink_admins)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdminCache::DumpAdminCache(int cache_flags, bool rebuild)
|
void AdminCache::DumpAdminCache(AdminCachePart part, bool rebuild)
|
||||||
{
|
{
|
||||||
if (cache_flags & ADMIN_CACHE_OVERRIDES)
|
List<IAdminListener *>::iterator iter;
|
||||||
|
IAdminListener *pListener;
|
||||||
|
cell_t result;
|
||||||
|
|
||||||
|
if (part == AdminCache_Overrides)
|
||||||
{
|
{
|
||||||
DumpCommandOverrideCache(Override_Command);
|
DumpCommandOverrideCache(Override_Command);
|
||||||
DumpCommandOverrideCache(Override_CommandGroup);
|
DumpCommandOverrideCache(Override_CommandGroup);
|
||||||
}
|
if (rebuild)
|
||||||
|
|
||||||
/* This will auto-invalidate the admin cache */
|
|
||||||
if (cache_flags & ADMIN_CACHE_GROUPS)
|
|
||||||
{
|
|
||||||
InvalidateGroupCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If we only requested an admin rebuild, re-use the internal memory */
|
|
||||||
if (((cache_flags & ADMIN_CACHE_ADMINS) == ADMIN_CACHE_ADMINS)
|
|
||||||
&& ((cache_flags & (1<<2)) != (1<<2)))
|
|
||||||
{
|
|
||||||
InvalidateAdminCache(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rebuild)
|
|
||||||
{
|
|
||||||
List<IAdminListener *>::iterator iter;
|
|
||||||
IAdminListener *pListener;
|
|
||||||
cell_t result;
|
|
||||||
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
|
||||||
{
|
{
|
||||||
pListener = (*iter);
|
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
||||||
pListener->OnRebuildAdminCache(cache_flags);
|
{
|
||||||
|
pListener = (*iter);
|
||||||
|
pListener->OnRebuildOverrideCache();
|
||||||
|
}
|
||||||
|
m_pCacheFwd->PushCell(part);
|
||||||
|
m_pCacheFwd->Execute(&result);
|
||||||
|
}
|
||||||
|
} else if (part == AdminCache_Groups || part == AdminCache_Admins) {
|
||||||
|
if (part == AdminCache_Groups)
|
||||||
|
{
|
||||||
|
InvalidateGroupCache();
|
||||||
|
if (rebuild)
|
||||||
|
{
|
||||||
|
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
||||||
|
{
|
||||||
|
pListener = (*iter);
|
||||||
|
pListener->OnRebuildGroupCache();
|
||||||
|
}
|
||||||
|
m_pCacheFwd->PushCell(part);
|
||||||
|
m_pCacheFwd->Execute(&result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
InvalidateAdminCache(true);
|
||||||
|
if (rebuild)
|
||||||
|
{
|
||||||
|
for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
|
||||||
|
{
|
||||||
|
pListener = (*iter);
|
||||||
|
pListener->OnRebuildAdminCache((part == AdminCache_Groups));
|
||||||
|
}
|
||||||
|
m_pCacheFwd->PushCell(AdminCache_Admins);
|
||||||
|
m_pCacheFwd->Execute(&result);
|
||||||
}
|
}
|
||||||
m_pCacheFwd->PushCell(cache_flags);
|
|
||||||
m_pCacheFwd->Execute(&result);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ public: //IAdminSystem
|
|||||||
GroupId GetGroupImmunity(GroupId id, unsigned int number);
|
GroupId GetGroupImmunity(GroupId id, unsigned int number);
|
||||||
void AddGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule rule);
|
void AddGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule rule);
|
||||||
bool GetGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule *pRule);
|
bool GetGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule *pRule);
|
||||||
void DumpAdminCache(int cache_flags, bool rebuild);
|
void DumpAdminCache(AdminCachePart part, bool rebuild);
|
||||||
void AddAdminListener(IAdminListener *pListener);
|
void AddAdminListener(IAdminListener *pListener);
|
||||||
void RemoveAdminListener(IAdminListener *pListener);
|
void RemoveAdminListener(IAdminListener *pListener);
|
||||||
/** User stuff */
|
/** User stuff */
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
static cell_t DumpAdminCache(IPluginContext *pContext, const cell_t *params)
|
static cell_t DumpAdminCache(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
g_Admins.DumpAdminCache(params[1], (params[2] == 1) ? true : false);
|
g_Admins.DumpAdminCache((AdminCachePart)params[1], (params[2] == 1) ? true : false);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,7 +185,8 @@ bool SourceModBase::LevelInit(char const *pMapName, char const *pMapEntities, ch
|
|||||||
|
|
||||||
m_IsMapLoading = false;
|
m_IsMapLoading = false;
|
||||||
|
|
||||||
g_Admins.DumpAdminCache(ADMIN_CACHE_GROUPS|ADMIN_CACHE_ADMINS|ADMIN_CACHE_OVERRIDES, true);
|
g_Admins.DumpAdminCache(AdminCache_Overrides, true);
|
||||||
|
g_Admins.DumpAdminCache(AdminCache_Groups, true);
|
||||||
|
|
||||||
RETURN_META_VALUE(MRES_IGNORED, true);
|
RETURN_META_VALUE(MRES_IGNORED, true);
|
||||||
}
|
}
|
||||||
|
@ -19,14 +19,13 @@ new g_ErrorCount = 0;
|
|||||||
#include "admin-overrides.sp"
|
#include "admin-overrides.sp"
|
||||||
#include "admin-groups.sp"
|
#include "admin-groups.sp"
|
||||||
|
|
||||||
public OnRebuildAdminCache(cache_flags)
|
public OnRebuildAdminCache(AdminCachePart:part)
|
||||||
{
|
{
|
||||||
RefreshLevels();
|
RefreshLevels();
|
||||||
if (cache_flags & ADMIN_CACHE_OVERRIDES)
|
if (part == AdminCache_Overrides)
|
||||||
{
|
{
|
||||||
ReadOverrides();
|
ReadOverrides();
|
||||||
}
|
} else if (part == AdminCache_Groups)
|
||||||
if (cache_flags & ADMIN_CACHE_GROUPS)
|
|
||||||
{
|
{
|
||||||
ReadGroups();
|
ReadGroups();
|
||||||
}
|
}
|
@ -81,10 +81,6 @@ public SMCResult:ReadGroups_KeyValue(Handle:smc,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
flag = g_FlagLetters[value[i] - 'a'];
|
flag = g_FlagLetters[value[i] - 'a'];
|
||||||
if (flag == Admin_None)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
SetAdmGroupAddFlag(g_CurGrp, flag, true);
|
SetAdmGroupAddFlag(g_CurGrp, flag, true);
|
||||||
}
|
}
|
||||||
} else if (StrEqual(key, "immunity")) {
|
} else if (StrEqual(key, "immunity")) {
|
||||||
|
@ -9,12 +9,6 @@ static g_LevelState = LEVEL_STATE_NONE;
|
|||||||
|
|
||||||
LoadDefaultLetters()
|
LoadDefaultLetters()
|
||||||
{
|
{
|
||||||
/* Clear letters first */
|
|
||||||
for (new i='a'; i<='z'; i++)
|
|
||||||
{
|
|
||||||
g_FlagLetters[i-'a'] = Admin_None;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_FlagLetters['a'-'a'] = Admin_Reservation;
|
g_FlagLetters['a'-'a'] = Admin_Reservation;
|
||||||
g_FlagLetters['b'-'a'] = Admin_Kick;
|
g_FlagLetters['b'-'a'] = Admin_Kick;
|
||||||
g_FlagLetters['c'-'a'] = Admin_Ban;
|
g_FlagLetters['c'-'a'] = Admin_Ban;
|
||||||
@ -22,7 +16,7 @@ LoadDefaultLetters()
|
|||||||
g_FlagLetters['e'-'a'] = Admin_Slay;
|
g_FlagLetters['e'-'a'] = Admin_Slay;
|
||||||
g_FlagLetters['f'-'a'] = Admin_Changemap;
|
g_FlagLetters['f'-'a'] = Admin_Changemap;
|
||||||
g_FlagLetters['g'-'a'] = Admin_Convars;
|
g_FlagLetters['g'-'a'] = Admin_Convars;
|
||||||
g_FlagLetters['h'-'a'] = Admin_Configs;
|
g_FlagLetters['h'-'a'] = Admin_Config;
|
||||||
g_FlagLetters['i'-'a'] = Admin_Chat;
|
g_FlagLetters['i'-'a'] = Admin_Chat;
|
||||||
g_FlagLetters['j'-'a'] = Admin_Vote;
|
g_FlagLetters['j'-'a'] = Admin_Vote;
|
||||||
g_FlagLetters['h'-'a'] = Admin_Password;
|
g_FlagLetters['h'-'a'] = Admin_Password;
|
||||||
@ -78,7 +72,7 @@ public SMCResult:ReadLevels_KeyValue(Handle:smc, const String:key[], const Strin
|
|||||||
|
|
||||||
chr -= 'a';
|
chr -= 'a';
|
||||||
|
|
||||||
new AdminFlag:flag = Admin_None;
|
new AdminFlag:flag;
|
||||||
|
|
||||||
if (StrEqual(key, "reservation"))
|
if (StrEqual(key, "reservation"))
|
||||||
{
|
{
|
||||||
@ -95,8 +89,8 @@ public SMCResult:ReadLevels_KeyValue(Handle:smc, const String:key[], const Strin
|
|||||||
flag = Admin_Changemap;
|
flag = Admin_Changemap;
|
||||||
} else if (StrEqual(key, "cvars")) {
|
} else if (StrEqual(key, "cvars")) {
|
||||||
flag = Admin_Convars;
|
flag = Admin_Convars;
|
||||||
} else if (StrEqual(key, "configs")) {
|
} else if (StrEqual(key, "config")) {
|
||||||
flag = Admin_Configs;
|
flag = Admin_Config;
|
||||||
} else if (StrEqual(key, "chat")) {
|
} else if (StrEqual(key, "chat")) {
|
||||||
flag = Admin_Chat;
|
flag = Admin_Chat;
|
||||||
} else if (StrEqual(key, "vote")) {
|
} else if (StrEqual(key, "vote")) {
|
||||||
|
@ -50,7 +50,7 @@ public SMCResult:ReadOverrides_KeyValue(Handle:smc,
|
|||||||
return SMCParse_Continue;
|
return SMCParse_Continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
new AdminFlag:flag = Admin_None;
|
new AdminFlag:flag;
|
||||||
|
|
||||||
if (strlen(value) > 1)
|
if (strlen(value) > 1)
|
||||||
{
|
{
|
||||||
@ -65,9 +65,9 @@ public SMCResult:ReadOverrides_KeyValue(Handle:smc,
|
|||||||
|
|
||||||
if (key[0] == '@')
|
if (key[0] == '@')
|
||||||
{
|
{
|
||||||
AddCommandOverride(key[1], Override_CommandGroup, flag);
|
AddCommandOverride(key[1], Override_CommandGroup, FlagToBit(flag));
|
||||||
} else {
|
} else {
|
||||||
AddCommandOverride(key, Override_Command, flag);
|
AddCommandOverride(key, Override_Command, FlagToBit(flag));
|
||||||
}
|
}
|
||||||
|
|
||||||
return SMCParse_Continue;
|
return SMCParse_Continue;
|
||||||
|
@ -113,26 +113,31 @@ enum AdmAccessMode
|
|||||||
Access_Effective, /**< Access the user has from their groups */
|
Access_Effective, /**< Access the user has from their groups */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ADMIN_CACHE_OVERRIDES (1<<0)
|
/**
|
||||||
#define ADMIN_CACHE_ADMINS (1<<1)
|
* @brief Represents the various cache regions.
|
||||||
#define ADMIN_CACHE_GROUPS ((1<<2)|ADMIN_CACHE_ADMINS)
|
*/
|
||||||
|
enum AdminCachePart
|
||||||
|
{
|
||||||
|
AdminCache_Overrides = 0, /**< Global overrides */
|
||||||
|
AdminCache_Groups = 1, /**< All groups (automatically invalidates admins too) */
|
||||||
|
AdminCache_Admins = 2, /**< All admins */
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when part of the admin cache needs to be rebuilt.
|
* Called when part of the cache which needs to be rebuilt.
|
||||||
* @note Groups should always be rebuilt before admins.
|
|
||||||
*
|
*
|
||||||
* @param cache_flags Flags for which cache to dump.
|
* @param part Part of the admin cache to rebuild.
|
||||||
*/
|
*/
|
||||||
forward OnRebuildAdminCache(cache_flags);
|
forward OnRebuildAdminCache(AdminCachePart:part);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells the admin system to dump a portion of the cache.
|
* Tells the admin system to dump a portion of the cache.
|
||||||
*
|
*
|
||||||
* @param cache_flags Flags for which cache to dump. Specifying groups also dumps admins.
|
* @param part Part of the cache to dump. Specifying groups also dumps admins.
|
||||||
* @param rebuild If true, the rebuild forwards will fire.
|
* @param rebuild If true, the rebuild forwards will fire.
|
||||||
* @noreturn
|
* @noreturn
|
||||||
*/
|
*/
|
||||||
native DumpAdminCache(cache_flags, bool:rebuild);
|
native DumpAdminCache(AdminCachePart:part, bool:rebuild);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a global command flag override. Any command registered with this name
|
* Adds a global command flag override. Any command registered with this name
|
||||||
|
@ -147,10 +147,6 @@ namespace SourceMod
|
|||||||
*/
|
*/
|
||||||
typedef int AdminId;
|
typedef int AdminId;
|
||||||
|
|
||||||
#define ADMIN_CACHE_OVERRIDES (1<<0)
|
|
||||||
#define ADMIN_CACHE_ADMINS (1<<1)
|
|
||||||
#define ADMIN_CACHE_GROUPS ((1<<2)|ADMIN_CACHE_ADMINS)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents an invalid/nonexistant group or an erroneous operation.
|
* @brief Represents an invalid/nonexistant group or an erroneous operation.
|
||||||
*/
|
*/
|
||||||
@ -161,19 +157,43 @@ namespace SourceMod
|
|||||||
*/
|
*/
|
||||||
#define INVALID_ADMIN_ID -1
|
#define INVALID_ADMIN_ID -1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Represents the various cache regions.
|
||||||
|
*/
|
||||||
|
enum AdminCachePart
|
||||||
|
{
|
||||||
|
AdminCache_Overrides = 0, /**< Global overrides */
|
||||||
|
AdminCache_Groups = 1, /**< All groups (automatically invalidates admins too) */
|
||||||
|
AdminCache_Admins = 2, /**< All admins */
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Provides callbacks for admin cache operations.
|
* @brief Provides callbacks for admin cache operations.
|
||||||
*/
|
*/
|
||||||
class IAdminListener
|
class IAdminListener
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
virtual unsigned int GetInterfaceVersion()
|
||||||
|
{
|
||||||
|
return SMINTERFACE_ADMINSYS_VERSION;
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Called when part of the admin cache needs to be rebuilt.
|
* @brief Called when the admin cache needs to be rebuilt.
|
||||||
* Groups should always be rebuilt before admins.
|
|
||||||
*
|
*
|
||||||
* @param cache_flags Flags for which cache to dump.
|
* @param auto_rebuild True if this is being called because of a group rebuild.
|
||||||
*/
|
*/
|
||||||
virtual void OnRebuildAdminCache(int cache_flags) =0;
|
virtual void OnRebuildAdminCache(bool auto_rebuild) =0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when the group cache needs to be rebuilt.
|
||||||
|
*/
|
||||||
|
virtual void OnRebuildGroupCache() =0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when the global override cache needs to be rebuilt.
|
||||||
|
*/
|
||||||
|
virtual void OnRebuildOverrideCache() =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef unsigned int FlagBits;
|
typedef unsigned int FlagBits;
|
||||||
@ -339,10 +359,10 @@ namespace SourceMod
|
|||||||
* @brief Tells the admin system to dump a portion of the cache.
|
* @brief Tells the admin system to dump a portion of the cache.
|
||||||
* This calls into plugin forwards to rebuild the cache.
|
* This calls into plugin forwards to rebuild the cache.
|
||||||
*
|
*
|
||||||
* @param cache_flags Flags for which cache to dump. Specifying groups also dumps admins.
|
* @param part Portion of the cache to dump.
|
||||||
* @param rebuild If true, the rebuild forwards/events will fire.
|
* @param rebuild If true, the rebuild forwards/events will fire.
|
||||||
*/
|
*/
|
||||||
virtual void DumpAdminCache(int cache_flags, bool rebuild) =0;
|
virtual void DumpAdminCache(AdminCachePart part, bool rebuild) =0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Adds an admin interface listener.
|
* @brief Adds an admin interface listener.
|
||||||
|
Loading…
Reference in New Issue
Block a user