Skip to content

Commit

Permalink
buffer playtime disconnect queries to prevent map change query traffi…
Browse files Browse the repository at this point in the history
…c jams
  • Loading branch information
rtldg committed Jun 20, 2022
1 parent 2efbc4a commit fa28502
Showing 1 changed file with 51 additions and 8 deletions.
59 changes: 51 additions & 8 deletions addons/sourcemod/scripting/shavit-stats.sp
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ int gI_TargetSteamID[MAXPLAYERS+1];
char gS_TargetName[MAXPLAYERS+1][MAX_NAME_LENGTH];

// playtime things
Transaction gH_DisconnectPlaytimeQueries = null;
float gF_PlaytimeStart[MAXPLAYERS+1];
float gF_PlaytimeStyleStart[MAXPLAYERS+1];
int gI_CurrentStyle[MAXPLAYERS+1];
Expand Down Expand Up @@ -143,6 +144,41 @@ public void OnPluginStart()
}

CreateTimer(2.5 * 60.0, Timer_SavePlaytime, 0, TIMER_REPEAT);
CreateTimer(3.0, Timer_SaveDisconnectPlaytime, 0, TIMER_REPEAT);
}

public void OnMapEnd()
{
PrintToServer("OnMapEnd");
FlushDisconnectPlaytime();
}

public void OnPluginEnd()
{
PrintToServer("OnPluginEnd");
FlushDisconnectPlaytime();
}

void FlushDisconnectPlaytime()
{
float now = GetEngineTime();

for (int i = 1; i <= MaxClients; i++)
{
if (!IsValidClient(i))
{
continue;
}

SavePlaytime(i, now, gH_DisconnectPlaytimeQueries);
}

if (gH_DisconnectPlaytimeQueries != null)
{
PrintToServer("flushing...");
gH_SQL.Execute(gH_DisconnectPlaytimeQueries, Trans_SavePlaytime_Success, Trans_SavePlaytime_Failure);
gH_DisconnectPlaytimeQueries = null;
}
}

public void Shavit_OnDatabaseLoaded()
Expand Down Expand Up @@ -308,13 +344,8 @@ public void OnClientDisconnect(int client)
return;
}

Transaction trans = null;
SavePlaytime(client, GetEngineTime(), trans);

if (trans != null)
{
gH_SQL.Execute(trans, Trans_SavePlaytime_Success, Trans_SavePlaytime_Failure);
}
PrintToServer("OnClientDisconnect");
SavePlaytime(client, GetEngineTime(), gH_DisconnectPlaytimeQueries);
}

public void Shavit_OnStyleChanged(int client, int oldstyle, int newstyle, int track, bool manual)
Expand Down Expand Up @@ -444,7 +475,7 @@ public void Trans_SavePlaytime_Failure(Database db, any data, int numQueries, co
LogError("Timer (stats save playtime) SQL query %d/%d failed. Reason: %s", failIndex, numQueries, error);
}

void SavePlaytime(int client, float now, Transaction&trans)
void SavePlaytime(int client, float now, Transaction& trans)
{
int iSteamID = GetSteamAccountID(client);

Expand Down Expand Up @@ -500,6 +531,18 @@ public Action Timer_SavePlaytime(Handle timer, any data)
return Plugin_Continue;
}

public Action Timer_SaveDisconnectPlaytime(Handle timer, any data)
{
if (gH_SQL == null || gH_DisconnectPlaytimeQueries == null)
{
return Plugin_Continue;
}

gH_SQL.Execute(gH_DisconnectPlaytimeQueries, Trans_SavePlaytime_Success, Trans_SavePlaytime_Failure);
gH_DisconnectPlaytimeQueries = null;
return Plugin_Continue;
}

public Action Command_Playtime(int client, int args)
{
if (!IsValidClient(client))
Expand Down

0 comments on commit fa28502

Please sign in to comment.