X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=highscores.h;h=f19f93a2fd2494ef4b6635a7d0a512d712e76365;hb=b93c61c54e7ac56f6808b9a563d3e4221ca8482e;hp=28662bfa0a403c2b15f9fa1f56525ab828a71881;hpb=5e22cdfe9f6f83e807ce6456ab538d02104cd01d;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/highscores.h b/highscores.h index 28662bf..f19f93a 100644 --- a/highscores.h +++ b/highscores.h @@ -25,7 +25,7 @@ typedef struct highscore_playerinfo highscore_playerinfo; struct highscore_playerinfo { - char nickname[10]; + char nickname[16]; u64 playerid; union @@ -92,6 +92,8 @@ static struct highscore_system aainfo_playerinfo; void *data, *playerinfo_data; + + u32 pool_size, playerinfo_pool_size; } highscore_system; @@ -154,20 +156,86 @@ static void highscores_free(void) vg_free( highscore_system.playerinfo_data ); } -static int highscores_init( u32 pool_size, u32 playerinfo_pool_size ) +static void highscores_create_db(void) { struct highscore_system *sys = &highscore_system; - sys->data = highscore_malloc( pool_size, sizeof(highscore_record) ); - if( !sys->data ) return 0; + vg_info( "Initializing database nodes\n" ); + memset( &sys->dbheader, 0, sizeof(highscore_database) ); + + sys->dbheader.pool_head = aatree_init_pool( &sys->aainfo, sys->pool_size ); + sys->dbheader.entry_capacity = sys->pool_size; + + for( int i=0; idbheader.tracks); i++ ) + { + highscore_track_table *table = &sys->dbheader.tracks[i]; + table->root_points = AATREE_PTR_NIL; + table->root_playerid = AATREE_PTR_NIL; + table->root_time = AATREE_PTR_NIL; + table->root_datetime = AATREE_PTR_NIL; + } + + /* Initialize secondary db */ + sys->dbheader.playerinfo_head = aatree_init_pool( + &sys->aainfo_playerinfo, + sys->playerinfo_pool_size ); + sys->dbheader.playerinfo_capacity = sys->playerinfo_pool_size; + sys->dbheader.playerinfo_root = AATREE_PTR_NIL; +} + +static int highscores_read(void) +{ + struct highscore_system *sys = &highscore_system; - sys->playerinfo_data = - highscore_malloc( playerinfo_pool_size, sizeof(highscore_playerinfo)); - if( !sys->playerinfo_data ) + FILE *fp = fopen( ".aadb", "rb" ); + if( fp ) { - vg_free( sys->data ); + vg_info( "Loading existing database\n" ); + + u64 count = fread( &sys->dbheader, sizeof(highscore_database), 1, fp ); + + if( count != 1 ) + { + vg_error( "Unexpected EOF reading database header\n" ); + return 0; + } + + count = fread( sys->data, sizeof(highscore_record), sys->pool_size, fp ); + if( count != sys->pool_size ) + { + vg_error( "Unexpected EOF reading database contents;" + " %lu records of %u were read\n", count, sys->pool_size ); + return 0; + } + + count = fread( sys->playerinfo_data, sizeof(highscore_playerinfo), + sys->playerinfo_pool_size, fp ); + + if( count != sys->playerinfo_pool_size ) + { + vg_error( "Unexpected EOF reading playerinfo contents;" + " %lu records of %u were read\n", count, + sys->playerinfo_pool_size ); + return 0; + } + + fclose( fp ); + return 1; + } + else + { + vg_low( "No existing database found (.aadb)\n" ); return 0; } +} + +static void highscores_init( u32 pool_size, u32 playerinfo_pool_size ) +{ + struct highscore_system *sys = &highscore_system; + + sys->data = highscore_malloc( pool_size, sizeof(highscore_record) ); + sys->playerinfo_data = highscore_malloc( playerinfo_pool_size, + sizeof(highscore_playerinfo)); /* This is ugly.. too bad! */ sys->aainfo.base = highscore_system.data; @@ -206,72 +274,8 @@ static int highscores_init( u32 pool_size, u32 playerinfo_pool_size ) sys->aainfo_playerinfo.offset = offsetof(highscore_playerinfo,aapn); sys->aainfo_playerinfo.p_cmp = NULL; - FILE *fp = fopen( ".aadb", "rb" ); - if( fp ) - { - vg_info( "Loading existing database\n" ); - - u64 count = fread( &sys->dbheader, sizeof(highscore_database), 1, fp ); - - if( count != 1 ) - { - vg_error( "Unexpected EOF reading database header\n" ); - - highscores_free(); - return 0; - } - - count = fread( sys->data, sizeof(highscore_record), pool_size, fp ); - if( count != pool_size ) - { - vg_error( "Unexpected EOF reading database contents;" - " %lu records of %u were read\n", count, pool_size ); - - highscores_free(); - return 0; - } - - count = fread( sys->playerinfo_data, sizeof(highscore_playerinfo), - playerinfo_pool_size, fp ); - if( count != playerinfo_pool_size ) - { - vg_error( "Unexpected EOF reading playerinfo contents;" - " %lu records of %u were read\n", count, - playerinfo_pool_size ); - - highscores_free(); - return 0; - } - - fclose( fp ); - } - else - { - vg_low( "No existing database found (.aadb)\n" ); - vg_info( "Initializing database nodes\n" ); - memset( &sys->dbheader, 0, sizeof(highscore_database) ); - - sys->dbheader.pool_head = aatree_init_pool( &sys->aainfo, pool_size ); - sys->dbheader.entry_capacity = pool_size; - - for( int i=0; idbheader.tracks); i++ ) - { - highscore_track_table *table = &sys->dbheader.tracks[i]; - table->root_points = AATREE_PTR_NIL; - table->root_playerid = AATREE_PTR_NIL; - table->root_time = AATREE_PTR_NIL; - table->root_datetime = AATREE_PTR_NIL; - } - - /* Initialize secondary db */ - sys->dbheader.playerinfo_head = aatree_init_pool( - &sys->aainfo_playerinfo, - playerinfo_pool_size ); - sys->dbheader.playerinfo_capacity = playerinfo_pool_size; - sys->dbheader.playerinfo_root = AATREE_PTR_NIL; - } - - return 1; + sys->playerinfo_pool_size = playerinfo_pool_size; + sys->pool_size = pool_size; } static int highscores_serialize_all(void) @@ -385,12 +389,12 @@ static aatree_ptr highscores_push_record( highscore_record *record ) return index; } -static aatree_ptr highscore_set_user_nickname( u64 steamid, char nick[10] ) +static aatree_ptr highscore_set_user_nickname( u64 steamid, char nick[16] ) { - char name[11]; - for( int i=0; i<10; i++ ) + char name[17]; + for( int i=0; i<16; i++ ) name[i] = nick[i]; - name[10] = '\0'; + name[16] = '\0'; vg_low( "Updating %lu's nickname -> %s\n", steamid, name ); @@ -429,7 +433,7 @@ static aatree_ptr highscore_set_user_nickname( u64 steamid, char nick[10] ) record ); } - for( int i=0; i<10; i++ ) + for( int i=0; i<16; i++ ) info->nickname[i] = nick[i]; return AATREE_PTR_NIL;