core: Call ConVarQueryFinished on client disconnect (#1384)
* Execute ConVarQueryFinished if client disconnects So people passing handles to the extra data can close them, adds a new return value to check if this happened * Update based on suggestion Co-authored-by: Asher Baker <asherkin@limetech.io> * Update based on notes * Normalize * Pass along cookie handle instead of invalid Co-authored-by: Asher Baker <asherkin@limetech.io>
This commit is contained in:
parent
4dd5ab7576
commit
46c54f829c
@ -43,6 +43,10 @@ const ParamType CONVARCHANGE_PARAMS[] = {Param_Cell, Param_String, Param_String}
|
|||||||
typedef List<const ConVar *> ConVarList;
|
typedef List<const ConVar *> ConVarList;
|
||||||
NameHashSet<ConVarInfo *, ConVarInfo::ConVarPolicy> convar_cache;
|
NameHashSet<ConVarInfo *, ConVarInfo::ConVarPolicy> convar_cache;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
eQueryCvarValueStatus_Cancelled = -1,
|
||||||
|
};
|
||||||
|
|
||||||
class ConVarReentrancyGuard
|
class ConVarReentrancyGuard
|
||||||
{
|
{
|
||||||
ConVar *cvar;
|
ConVar *cvar;
|
||||||
@ -238,6 +242,19 @@ void ConVarManager::OnClientDisconnected(int client)
|
|||||||
ConVarQuery &query = (*iter);
|
ConVarQuery &query = (*iter);
|
||||||
if (query.client == client)
|
if (query.client == client)
|
||||||
{
|
{
|
||||||
|
IPluginFunction *pCallback = query.pCallback;
|
||||||
|
if (pCallback)
|
||||||
|
{
|
||||||
|
cell_t ret;
|
||||||
|
|
||||||
|
pCallback->PushCell(query.cookie);
|
||||||
|
pCallback->PushCell(client);
|
||||||
|
pCallback->PushCell(eQueryCvarValueStatus_Cancelled);
|
||||||
|
pCallback->PushString("");
|
||||||
|
pCallback->PushString("");
|
||||||
|
pCallback->PushCell(query.value);
|
||||||
|
pCallback->Execute(&ret);
|
||||||
|
}
|
||||||
iter = m_ConVarQueries.erase(iter);
|
iter = m_ConVarQueries.erase(iter);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,7 @@ enum ConVarBounds
|
|||||||
*/
|
*/
|
||||||
enum ConVarQueryResult
|
enum ConVarQueryResult
|
||||||
{
|
{
|
||||||
|
ConVarQuery_Cancelled = -1, //< Client disconnected during query */
|
||||||
ConVarQuery_Okay = 0, //< Retrieval of client convar value was successful. */
|
ConVarQuery_Okay = 0, //< Retrieval of client convar value was successful. */
|
||||||
ConVarQuery_NotFound, //< Client convar was not found. */
|
ConVarQuery_NotFound, //< Client convar was not found. */
|
||||||
ConVarQuery_NotValid, //< A console command with the same name was found, but there is no convar. */
|
ConVarQuery_NotValid, //< A console command with the same name was found, but there is no convar. */
|
||||||
|
Loading…
Reference in New Issue
Block a user