From fcfa8aa2aec52e9e6d9c1e08b9cac9b8fbdebf1a Mon Sep 17 00:00:00 2001 From: Samual Lenks Date: Sun, 16 Feb 2014 22:19:37 -0500 Subject: [PATCH] Add checkupdate function, fix some things about the last commit --- qcsrc/common/playerstats.qc | 95 ++++++++++++++++++++++--------------- qcsrc/common/playerstats.qh | 9 ++-- qcsrc/server/cl_client.qc | 3 +- 3 files changed, 60 insertions(+), 47 deletions(-) diff --git a/qcsrc/common/playerstats.qc b/qcsrc/common/playerstats.qc index fb28fd556..742dd1185 100644 --- a/qcsrc/common/playerstats.qc +++ b/qcsrc/common/playerstats.qc @@ -417,63 +417,79 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status) } } -void PlayerStats_PlayerBasic() +void PlayerStats_PlayerBasic(entity joiningplayer, float newrequest) { + // http://stats.xonotic.org/player/GgXRw6piDtFIbMArMuiAi8JG4tiin8VLjZgsKB60Uds=/elo.txt if(autocvar_g_playerstats_playerbasic_uri != "") { - entity player; - - // create the database if it doesn't already exist - if(PS_B_IN_DB < 0) + string uri = autocvar_g_playerstats_playerbasic_uri; + if(joiningplayer.crypto_idfp != "") { - PS_B_IN_DB = -1; - PS_B_IN_DB = db_create(); - } - - FOR_EACH_REALCLIENT(player) - { - string uri = autocvar_g_playerstats_playerbasic_uri; - if((uri != "") && (player.crypto_idfp != "")) + // create the database if it doesn't already exist + if(PS_B_IN_DB < 0) { - uri = strcat(uri, "/player/", uri_escape(uri_escape(player.crypto_idfp)), "/elo.txt"); - print("Retrieving playerstats from URL: ", uri, "\n"); - url_single_fopen( - uri, - FILE_APPEND, - PlayerStats_PlayerBasic_Handler, - player - ); + PS_B_IN_DB = -1; + PS_B_IN_DB = db_create(); } - /*p.crypto_idfp != "") + // now request the information + uri = strcat(uri, "/player/", uri_escape(uri_escape(joiningplayer.crypto_idfp)), "/elo.txt"); + print("Retrieving playerstats from URL: ", uri, "\n"); + url_single_fopen( + uri, + FILE_APPEND, + PlayerStats_PlayerBasic_Handler, + joiningplayer + ); + + // set status appropriately // todo: check whether the player info exists in the database previously + if(newrequest) { - uri = strcat(uri, "/elo/", uri_escape(p.crypto_idfp)); - print("Retrieving playerstats from URL: ", uri, "\n"); - url_single_fopen(uri, FILE_READ, PlayerInfo_ready, p); - }*/ - } - - if(PlayerStats_PlayerBasic_Status == PS_B_STATUS_RECEIVED) - { - // database still contains useful information, so don't clear it of a useful status - PlayerStats_PlayerBasic_Status = PS_B_STATUS_UPDATING; - } - else - { - // database was previously empty or never hit received status for some reason - PlayerStats_PlayerBasic_Status = PS_B_STATUS_WAITING; + // database still contains useful information, so don't clear it of a useful status + joiningplayer.playerstats_basicstatus = PS_B_STATUS_WAITING; + } + else + { + // database was previously empty or never hit received status for some reason + joiningplayer.playerstats_basicstatus = PS_B_STATUS_UPDATING; + } } } else { - // player has this disabled, kill the DB and set status to idle + // server has this disabled, kill the DB and set status to idle if(PS_B_IN_DB >= 0) { + entity player; + db_close(PS_B_IN_DB); PS_B_IN_DB = -1; + + FOR_EACH_REALCLIENT(player) { player.playerstats_basicstatus = PS_B_STATUS_IDLE; } } + } +} + +void PlayerStats_PlayerBasic_CheckUpdate(entity joiningplayer) +{ + // determine whether we should retrieve playerbasic information again - PlayerStats_PlayerBasic_Status = PS_B_STATUS_IDLE; + #if 0 + printf("PlayerStats_PlayerBasic_CheckUpdate('%s'): %f\n", + joiningplayer.netname, + time + ); + #endif + + // TODO: check to see if this playerid is inside the database already somehow... + // for now we'll just check the field, but this won't work for players who disconnect and reconnect properly + // although maybe we should just submit another request ANYWAY? + if(!joiningplayer.playerstats_basicstatus) + { + PlayerStats_PlayerBasic( + joiningplayer, + (joiningplayer.playerstats_basicstatus == PS_B_STATUS_RECEIVED) + ); } } @@ -614,6 +630,7 @@ void PlayerStats_PlayerDetail_AddItem(string event, string data) void PlayerStats_PlayerDetail(void) { + // http://stats.xonotic.org/player/me if((autocvar_g_playerstats_playerdetail_uri != "") && (crypto_getmyidstatus(0) > 0)) { // create the database if it doesn't already exist diff --git a/qcsrc/common/playerstats.qh b/qcsrc/common/playerstats.qh index bdbf75b2f..26a1efc28 100644 --- a/qcsrc/common/playerstats.qh +++ b/qcsrc/common/playerstats.qh @@ -3,14 +3,10 @@ float PS_GR_OUT_DB; // playerstats_gamereport_out_db // db of info SENT at the end of a match //float PS_GR_IN_DB; // playerstats_gamereport_in_db // db for info COLLECTED at the end of a match float PS_B_IN_DB; // playerstats_playerbasic_in_db // db for info COLLECTED for basic player info (ELO) -// http://stats.xonotic.org/player/GgXRw6piDtFIbMArMuiAi8JG4tiin8VLjZgsKB60Uds=/elo.txt -- this works, -// http://stats.xonotic.org/player/ENkUjf83vKMVZcNm%2F6Ao1EmXEj1apQ6XvdQTxwELvmA%3D/elo.txt -- but this doesn't?!? -// ENkUjf83vKMVZcNm/6Ao1EmXEj1apQ6XvdQTxwELvmA= #endif #ifdef MENUQC float PS_D_IN_DB; // playerstats_playerdetail_in_db // db for info COLLECTED for detailed player profile display -// http://stats.xonotic.org/player/me #endif #ifdef SVQC @@ -96,10 +92,11 @@ var string autocvar_g_playerstats_gamereport_uri = "http://stats.xonotic.org/sta #define PS_B_STATUS_WAITING 0 #define PS_B_STATUS_RECEIVED 1 #define PS_B_STATUS_UPDATING 2 -var float PlayerStats_PlayerBasic_Status = PS_B_STATUS_IDLE; +.float playerstats_basicstatus; var string autocvar_g_playerstats_playerbasic_uri = "http://stats.xonotic.org"; -void PlayerStats_PlayerBasic(); +void PlayerStats_PlayerBasic(entity joiningplayer, float newrequest); +void PlayerStats_PlayerBasic_CheckUpdate(entity joiningplayer); void PlayerStats_PlayerBasic_Handler(entity fh, entity p, float status); #endif //SVQC #ifdef MENUQC diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 329d44dea..4fb794aa7 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -1047,8 +1047,7 @@ void ClientConnect (void) player_count = 0; } - //PlayerInfo_Basic(self); - PlayerStats_PlayerBasic(); + if(IS_REAL_CLIENT(self)) { PlayerStats_PlayerBasic_CheckUpdate(self); } PlayerScore_Attach(self); ClientData_Attach(); -- 2.39.2