From 557a1c57d6cf33a53f5b596c7fd94c0ad4354a97 Mon Sep 17 00:00:00 2001 From: Samual Lenks Date: Sun, 22 Dec 2013 02:54:05 -0500 Subject: [PATCH] Start working on PlayerStats_PlayerDetail_Status tracking system --- qcsrc/common/playerstats.qc | 71 +++++++++++++++++++++++-------------- qcsrc/common/playerstats.qh | 5 +++ 2 files changed, 50 insertions(+), 26 deletions(-) diff --git a/qcsrc/common/playerstats.qc b/qcsrc/common/playerstats.qc index a0ca833b4..ef5fe355b 100644 --- a/qcsrc/common/playerstats.qc +++ b/qcsrc/common/playerstats.qc @@ -394,8 +394,11 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status) // url_fclose has finished print("Player stats written\n"); PlayerStats_GameReport_DelayMapVote = FALSE; - db_close(PS_GR_OUT_DB); - PS_GR_OUT_DB = -1; + if(PS_GR_OUT_DB >= 0) + { + db_close(PS_GR_OUT_DB); + PS_GR_OUT_DB = -1; + } break; } @@ -580,26 +583,21 @@ void PlayerStats_PlayerDetail_AddItem(string event, string data) db_put(PS_D_IN_DB, sprintf("#%s", event), data); print("Added item ", sprintf("#%s", event), "=", data, " to PS_D_IN_DB\n"); } - +#define PS_D_STATUS_ERROR -1 +#define PS_D_STATUS_IDLE 0 +#define PS_D_STATUS_WAITING 1 +#define PS_D_STATUS_RECEIVED 2 void PlayerStats_PlayerDetail() { - //PS_D_IN_DB = -1; - //PS_D_IN_DB = db_create(); - - if(PS_D_IN_DB < 0) - { - PS_D_IN_DB = -1; - PS_D_IN_DB = db_create(); - } - else - { - // kill the old db and try again - //db_close(PS_D_IN_DB); - //PS_D_IN_DB = -1; - } - if((autocvar_g_playerstats_playerdetail_uri != "") && (crypto_getmyidstatus(0) > 0)) { + // create the database if it doesn't already exist + if(PS_D_IN_DB < 0) + { + PS_D_IN_DB = -1; + PS_D_IN_DB = db_create(); + } + //uri = strcat(uri, "/player/", uri_escape(crypto_getmyidfp(0))); print("Retrieving playerstats from URL: ", autocvar_g_playerstats_playerdetail_uri, "\n"); url_single_fopen( @@ -608,6 +606,20 @@ void PlayerStats_PlayerDetail() PlayerStats_PlayerDetail_Handler, world ); + + PlayerStats_PlayerDetail_Status = PS_D_STATUS_WAITING; + } + else + { + // player has this disabled, kill the DB and set status to idle + if(PS_D_IN_DB >= 0) + { + db_close(PS_D_IN_DB); + PS_D_IN_DB = -1; + } + + PlayerStats_PlayerDetail_Status = PS_D_STATUS_IDLE; + } } @@ -617,7 +629,7 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status) { case URL_READY_CANWRITE: { - print("-- Sending data to player stats server\n"); + print("PlayerStats_PlayerDetail_Handler(): Sending data to player stats server...\n"); url_fputs(fh, "V 1\n"); #ifdef WATERMARK url_fputs(fh, sprintf("R %s\n", WATERMARK)); @@ -634,12 +646,11 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status) case URL_READY_CANREAD: { - print("-- Got response from player stats server:\n"); + //print("PlayerStats_PlayerDetail_Handler(): Got response from player stats server:\n"); string input = ""; string gametype = "overall"; while((input = url_fgets(fh))) { - //print(input, "\n"); float count = tokenizebyseparator(input, " "); string key = "", event = "", data = ""; @@ -689,7 +700,7 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status) break; } - default: print("PlayerStats_PlayerDetail_Handler(): Key went unhandled?\n"); break; + default: backtrace("PlayerStats_PlayerDetail_Handler(): Key went unhandled?\n"); break; } #if 0 @@ -701,22 +712,30 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status) )); #endif } - print("-- End of response.\n"); + //print("PlayerStats_PlayerDetail_Handler(): End of response.\n"); url_fclose(fh); + PlayerStats_PlayerDetail_Status = PS_D_RECEIVED; statslist.getStats(statslist); break; } + case URL_READY_CLOSED: { // url_fclose has finished - print("Player stats synchronized with server\n"); + print("PlayerStats_PlayerDetail_Handler(): Player stats synchronized with server.\n"); break; } - + case URL_READY_ERROR: default: { - print("Receiving player stats failed: ", ftos(status), "\n"); + print("PlayerStats_PlayerDetail_Handler(): Receiving player stats failed: ", ftos(status), "\n"); + PlayerStats_PlayerDetail_Status = PS_D_ERROR; + if(PS_D_IN_DB >= 0) + { + db_close(PS_D_IN_DB); + PS_D_IN_DB = -1; + } break; } } diff --git a/qcsrc/common/playerstats.qh b/qcsrc/common/playerstats.qh index 764ac9c43..e06882b31 100644 --- a/qcsrc/common/playerstats.qh +++ b/qcsrc/common/playerstats.qh @@ -96,6 +96,11 @@ void PlayerStats_PlayerBasic(); void PlayerStats_PlayerBasic_Handler(entity fh, entity p, float status); #endif //SVQC #ifdef MENUQC +#define PS_D_STATUS_ERROR -1 +#define PS_D_STATUS_IDLE 0 +#define PS_D_STATUS_WAITING 1 +#define PS_D_STATUS_RECEIVED 2 +var float PlayerStats_PlayerDetail_Status = PS_D_STATUS_IDLE; var string autocvar_g_playerstats_playerdetail_uri = "http://stats.xonotic.org/player/me"; void PlayerStats_PlayerDetail(); void PlayerStats_PlayerDetail_Handler(entity fh, entity p, float status); -- 2.39.2