typedef u64 u64_steamid;
typedef u64 SteamAPICall_t;
+typedef u32 AppId_t;
+const AppId_t k_uAppIdInvalid = 0x0;
+
+typedef u32 DepotId_t;
+const DepotId_t k_uDepotIdInvalid = 0x0;
+
+typedef u32 RTime32;
+
enum { k_iSteamUserCallbacks = 100 };
enum { k_iSteamGameServerCallbacks = 200 };
enum { k_iSteamFriendsCallbacks = 300 };
eServerMode, pchVersionString );
}
+
+void *SteamAPI_SteamGameServer_v014(void);
+void *SteamAPI_SteamGameServer(void)
+{
+ return SteamAPI_SteamGameServer_v014();
+}
+
+void SteamAPI_ISteamGameServer_LogOnAnonymous( void* self );
+
void SteamGameServer_Shutdown(void);
int SteamGameServer_BSecure(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);
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;
* void *data = callback.m_pubParam;
*/
- callback_handler(&callback);
+ for( int i=0; i<steam_callback_handler_count; i++ )
+ {
+ steam_callback_handler *handler = &steam_callback_handlers[i];
+ if( handler->callback_id == callback.m_iCallback )
+ {
+ handler->p_handler( &callback );
+ break;
+ }
+ }
}
SteamAPI_ManualDispatch_FreeLastCallback( pipe );
}
}
+/*
+ * This is required to run the server outside of steamcmd environment.
+ * It can be any appid but idealy the one that is actually your game
+ */
+static void steamworks_ensure_txt( const char *appid_str )
+{
+ FILE *txt = fopen("steam_appid.txt", "w");
+ fputs( appid_str, txt );
+ fclose( txt );
+}
+
#endif /* VG_STEAM_H */