From: hgn Date: Tue, 9 Aug 2022 16:10:43 +0000 (+0100) Subject: callbacks X-Git-Url: https://harrygodden.com/git/?p=vg.git;a=commitdiff_plain;h=23ff40d5a3e3ca7d02f083ca3e1bd1db7a38f65b callbacks --- diff --git a/src/vg/vg_steam.h b/src/vg/vg_steam.h index 604dcdf..d1e88be 100644 --- a/src/vg/vg_steam.h +++ b/src/vg/vg_steam.h @@ -470,8 +470,43 @@ steam_async *steam_new_async(void) return &steam_async_trackers[ steam_async_track_count ++ ]; } +/* + * Regular callbacks + * ============================================================================= + */ + +typedef struct steam_callback_handler steam_callback_handler; +struct steam_callback_handler +{ + u32 callback_id; + void (*p_handler)( CallbackMsg_t *msg ); +} +static steam_callback_handlers[64]; +static u32 steam_callback_handler_count; + +static int steam_register_callback( u32 id, + void (*p_handler)( CallbackMsg_t *msg ) ) +{ + if( steam_callback_handler_count == vg_list_size(steam_callback_handlers) ) + { + vg_error( "Too many steam callback handlers registered (%u)\n", + steam_callback_handler_count ); + + return 0; + } + + steam_callback_handler *handler = &steam_callback_handlers[ + steam_callback_handler_count ++ ]; + + handler->p_handler = p_handler; + handler->callback_id = id; + + return 1; +} + /* * Event loop + * ============================================================================= */ HSteamPipe SteamAPI_GetHSteamPipe(void); HSteamPipe SteamGameServer_GetHSteamPipe(void); @@ -487,8 +522,7 @@ int SteamAPI_ManualDispatch_GetAPICallResult( HSteamPipe hSteamPipe, void SteamAPI_ReleaseCurrentThreadMemory(void); -static void steamworks_event_loop( HSteamPipe pipe, - void(*callback_handler)(CallbackMsg_t *msg) ) +static void steamworks_event_loop( HSteamPipe pipe ) { SteamAPI_ManualDispatch_RunFrame( pipe ); CallbackMsg_t callback; @@ -577,7 +611,15 @@ static void steamworks_event_loop( HSteamPipe pipe, * void *data = callback.m_pubParam; */ - callback_handler(&callback); + for( int i=0; icallback_id == callback.m_iCallback ) + { + handler->p_handler( &callback ); + break; + } + } } SteamAPI_ManualDispatch_FreeLastCallback( pipe );