From bf6c31ea34c597c19e7eb77875418afb37a6c0c7 Mon Sep 17 00:00:00 2001 From: hgn Date: Fri, 11 Apr 2025 22:45:21 +0100 Subject: [PATCH] more quue stuff --- src/gameserver.c | 12 ++++++++---- src/gameserver_database.c | 14 ++------------ src/gameserver_replay.c | 14 +++----------- src/gameserver_requests.c | 6 ++---- 4 files changed, 15 insertions(+), 31 deletions(-) diff --git a/src/gameserver.c b/src/gameserver.c index d73dc4a..7a9909b 100644 --- a/src/gameserver.c +++ b/src/gameserver.c @@ -826,15 +826,19 @@ int main( int argc, char *argv[] ) vg_async_queue_end( &_gs_db.tasks, k_async_quit_when_empty ); } - if( vg_async_consume( &_gameserver.tasks, 100 ) ) - break; + // TODO Measure max time spent on tasks? + + while( vg_async_has_work( &_gameserver.tasks ) ) + { + if( vg_async_process_next_task( &_gameserver.tasks ) == 0 ) + goto EE; + } } - vg_info( "Program ends\n" ); +EE:vg_info( "Program ends\n" ); SteamAPI_ISteamNetworkingSockets_DestroyPollGroup( hSteamNetworkingSockets, _gameserver.client_group ); SteamAPI_ISteamNetworkingSockets_CloseListenSocket( hSteamNetworkingSockets, listener ); - SteamGameServer_Shutdown(); E1:db_free(); diff --git a/src/gameserver_database.c b/src/gameserver_database.c index 479f263..d4ec092 100644 --- a/src/gameserver_database.c +++ b/src/gameserver_database.c @@ -86,16 +86,7 @@ static void *database_worker_thread(void *_) return NULL; } - /* - * Request processing loop - */ - while(1) - { - usleep(50000); - - if( vg_async_consume( &_gs_db.tasks, 100 ) ) - break; - } + while( vg_async_process_next_task( &_gs_db.tasks ) ) {} sqlite3_close( _gs_db.db ); vg_low( "Database thread terminates.\n" ); @@ -368,11 +359,10 @@ void db_action_set_username( u64 steamid, const char *username ) THREAD_0; vg_async_task *task = vg_allocate_async_task( &_gs_db.tasks, sizeof(struct task_set_username), 1 ); - task->handler = task_set_username; struct task_set_username *info = (void *)task->data; info->steamid = steamid; vg_strncpy( username, info->name, sizeof(info->name), k_strncpy_always_add_null ); - vg_async_task_dispatch( &_gs_db.tasks, task ); + vg_async_task_dispatch( &_gs_db.tasks, task, task_set_username ); } enum request_status gameserver_cat_table( vg_msg *msg, const char *mod, const char *route, u32 week, const char *alias ) diff --git a/src/gameserver_replay.c b/src/gameserver_replay.c index ec87189..3910c55 100644 --- a/src/gameserver_replay.c +++ b/src/gameserver_replay.c @@ -88,8 +88,6 @@ void _gs_replay_run_save_requests( u32 client_id ) u32 task_size = sizeof( struct serialized_replay ) + buffer_size; vg_async_task *task = vg_allocate_async_task( &_gs_db.tasks, task_size, 1 ); - task->handler = task_write_replay; - struct serialized_replay *replay_inf = (void *)task->data; replay_inf->steamid = _gameserver.clients[ client_id ].steamid; replay_inf->minute = minute; @@ -112,7 +110,7 @@ void _gs_replay_run_save_requests( u32 client_id ) } replay_inf->buffer_size = output_size; - vg_async_task_dispatch( &_gs_db.tasks, task ); + vg_async_task_dispatch( &_gs_db.tasks, task, task_write_replay ); flags |= (u8)k_replay_minute_saved; } @@ -186,8 +184,7 @@ void _gs_replay_request_save( u32 client_id, u64 steamid, i64 last_second, u32 c info->steam_id = steamid; info->last_second = last_second; info->centiseconds = centiseconds; - task->handler = _gs_replay_async_request_save; - vg_async_task_dispatch( &_gameserver.tasks, task ); + vg_async_task_dispatch( &_gameserver.tasks, task, _gs_replay_async_request_save ); return; } @@ -211,7 +208,6 @@ void _gs_replay_request_save( u32 client_id, u64 steamid, i64 last_second, u32 c replay->minute_flags[ minute_index ] |= k_replay_minute_save_request; } - vg_info( "Preparing descriptor file\n" ); u32 descriptor_size = 1024; vg_async_task *replay_descriptor_task = vg_allocate_async_task( &_gs_db.tasks, sizeof(struct replay_descriptor_info) + descriptor_size, 1 ); @@ -234,11 +230,7 @@ void _gs_replay_request_save( u32 client_id, u64 steamid, i64 last_second, u32 c descriptor_info->message_length = msg.cur.co; descriptor_info->last_second = last_second; descriptor_info->steamid = steamid; - - vg_info( "..1\n" ); - replay_descriptor_task->handler = _gs_replay_write_descriptor; - vg_async_task_dispatch( &_gs_db.tasks, replay_descriptor_task ); - vg_info( "...\n" ); + vg_async_task_dispatch( &_gs_db.tasks, replay_descriptor_task, _gs_replay_write_descriptor ); } void _gs_replay_server_tick(void) diff --git a/src/gameserver_requests.c b/src/gameserver_requests.c index d77b0aa..9d8c121 100644 --- a/src/gameserver_requests.c +++ b/src/gameserver_requests.c @@ -116,10 +116,9 @@ void _gs_requests_tick(void) vg_pool_watch( &_gs_requests.request_pool, rc->current_request ); vg_async_task *run_task = vg_allocate_async_task( &_gs_db.tasks, sizeof(struct task_request_run_info), 1 ); - run_task->handler = task_request_run; struct task_request_run_info *info = (void *)run_task->data; info->pool_id = rc->current_request; - vg_async_task_dispatch( &_gs_db.tasks, run_task ); + vg_async_task_dispatch( &_gs_db.tasks, run_task, task_request_run ); req->state = k_request_state_server_processing; log_request_status( req ); @@ -386,8 +385,7 @@ static void task_request_run( vg_async_task *task ) E0:; vg_async_task *return_task = vg_allocate_async_task( &_gameserver.tasks, sizeof(struct task_request_run_info), 1 ); memcpy( return_task->data, info, sizeof(struct task_request_run_info) ); - return_task->handler = task_request_processing_complete; - vg_async_task_dispatch( &_gameserver.tasks, return_task ); + vg_async_task_dispatch( &_gameserver.tasks, return_task, task_request_processing_complete ); } void _gs_handle_request_message( u32 client_id, SteamNetworkingMessage_t *msg ) -- 2.25.1