more quue stuff
authorhgn <hgodden00@gmail.com>
Fri, 11 Apr 2025 21:45:21 +0000 (22:45 +0100)
committerhgn <hgodden00@gmail.com>
Fri, 11 Apr 2025 21:45:21 +0000 (22:45 +0100)
src/gameserver.c
src/gameserver_database.c
src/gameserver_replay.c
src/gameserver_requests.c

index d73dc4aa032cbd75feee51002412c7eb6361b162..7a9909bd7423625513810526da8290ffc23094d9 100644 (file)
@@ -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();
index 479f263ddb63f9e23276e699fcd8cd913dd40e5e..d4ec092071230a245d4e1331cefd77cb8cac8f42 100644 (file)
@@ -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 )
index ec87189669eccb4fed67883427073559c8070786..3910c5500823a59dc91eee9b1884134125d1a995 100644 (file)
@@ -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)
index d77b0aadfc356ca47917a24272159caa74170614..9d8c121aafc00823049edec85fd1b764019348ae 100644 (file)
@@ -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 )