Skip to content

Commit

Permalink
Make the RPC less invasive, only change when we NEED to.
Browse files Browse the repository at this point in the history
Thanks Flibit for the idea! :D
  • Loading branch information
Buggem committed Jan 25, 2025
1 parent 6e5fed0 commit bf9dd78
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 29 deletions.
39 changes: 22 additions & 17 deletions desktop_version/src/DiscordNetwork.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ struct DISCORD_application {
struct IDiscordActivityManager* activityMan;
} app;

struct DiscordActivity activity;
static struct DiscordActivity activity;

bool discordDetected = false;
bool discordPostInit = false;
static bool discordDetected = false;
static bool discordPostInit = false;


static void* libHandle = NULL;
Expand Down Expand Up @@ -142,42 +142,47 @@ int32_t DISCORD_init(void)
return 1;
}

void DISCORD_update(const char* area, const char* roomname)
int32_t DISCORD_update(void)
{
if (libHandle == NULL)
{
// no discord or just shutdown
return;
// no Discord or just shutdown
return 0;
}
if (app.core == NULL || !discordDetected)
{
// No Discord
return;
return 0;
}

if (!DISCORD_REQUIRE(app.core->run_callbacks(app.core)))
{
// Something or other is wrong, but do we care?
return;
// Something or other is wrong, but do we care?
return 0;
}
return 1;
}
void DISCORD_unlockAchievement(const char *name)
{
// No "achievements" in Discord
}

void DISCORD_setRPC(const char *area, const char *roomname)
{
if (app.activityMan == NULL)
{
vlog_debug("No activityMan! - it\'s fine, we can recreate this" );
vlog_debug("No activityMan! - it\'s fine, we can recreate this" );
app.activityMan = app.core->get_activity_manager(app.core);
}
if (SDL_strcmp(activity.state, roomname) != 0 || SDL_strcmp(activity.assets.large_text, area) != 0)
{
SDL_strlcpy(activity.state, roomname, sizeof(activity.state));
SDL_strlcpy(activity.state, roomname, sizeof(activity.state));
SDL_strlcpy(activity.assets.large_image, "vvvvvv", sizeof(activity.assets.large_image));
SDL_strlcpy(activity.assets.large_text, area, sizeof(activity.assets.large_text));

app.activityMan->update_activity(app.activityMan, &activity, NULL, NULL);
}
}
void DISCORD_unlockAchievement(const char *name)
{
// No "achievements" in Discord
}


}

#endif // MakeAndPlay
8 changes: 7 additions & 1 deletion desktop_version/src/GOGNetwork.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,18 @@ void GOG_shutdown(void)
{
}

void GOG_update(const char* area, const char* roomname)
int32_t GOG_update(void)
{
return 0;
}

void GOG_unlockAchievement(const char* name)
{
}

void GOG_setRPC(const char* area, const char* roomname)
{
}


#endif /* MAKEANDPLAY */
35 changes: 29 additions & 6 deletions desktop_version/src/Network.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@
#define DECLARE_BACKEND(name) \
int32_t name##_init(void); \
void name##_shutdown(void); \
void name##_update(const char *area, const char *roomname); \
void name##_unlockAchievement(const char *name);
int32_t name##_update(void); \
void name##_unlockAchievement(const char *name); \
void name##_setRPC(const char *area, const char *roomname);
#ifdef STEAM_NETWORK
DECLARE_BACKEND(STEAM)
#endif
Expand All @@ -54,8 +55,9 @@ typedef struct NetworkBackend
int32_t IsInit;
int32_t (*Init)(void);
void (*Shutdown)(void);
void (*Update)(const char*, const char*);
int32_t (*Update)(void);
void (*UnlockAchievement)(const char*);
void (*SetRPC)(const char*, const char*);
} NetworkBackend;

#if NUM_BACKENDS > 0
Expand All @@ -69,7 +71,9 @@ int NETWORK_init(void)
backends[index].Init = name##_init; \
backends[index].Shutdown = name##_shutdown; \
backends[index].Update = name##_update; \
backends[index].UnlockAchievement = name##_unlockAchievement;
backends[index].UnlockAchievement = name##_unlockAchievement; \
backends[index].SetRPC = name##_setRPC;

#ifdef STEAM_NETWORK
ASSIGN_BACKEND(STEAM, 0)
#endif
Expand Down Expand Up @@ -104,16 +108,22 @@ void NETWORK_shutdown(void)
#endif
}

void NETWORK_update(const char *area, const char *roomname)

int32_t NETWORK_update(void)
{
int32_t result = 0;
#if NUM_BACKENDS > 0
int32_t i;
for (i = 0; i < NUM_BACKENDS; i += 1)
if (backends[i].IsInit)
{
backends[i].Update(area, roomname);
if ( backends[i].Update() )
{
result |= (1 << i);
}
}
#endif
return result;
}

void NETWORK_unlockAchievement(const char *name)
Expand All @@ -129,3 +139,16 @@ void NETWORK_unlockAchievement(const char *name)
UNUSED(name);
#endif
}

void NETWORK_setRPC(const char *area, const char *roomname)
{
#if NUM_BACKENDS > 0
int32_t i;
for (i = 0; i < NUM_BACKENDS; i += 1)
if (backends[i].IsInit)
{
backends[i].SetRPC(area, roomname);
}
#endif
}

4 changes: 3 additions & 1 deletion desktop_version/src/Network.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@ int32_t NETWORK_init(void);

void NETWORK_shutdown(void);

void NETWORK_update(const char *area, const char *roomname);
int32_t NETWORK_update(void);

void NETWORK_unlockAchievement(const char *name);

int32_t NETWORK_getAchievementProgress(const char *name);

void NETWORK_setAchievementProgress(const char *name, int32_t stat);

void NETWORK_setRPC(const char *area, const char *roomname);

#ifdef __cplusplus
}
#endif
Expand Down
10 changes: 8 additions & 2 deletions desktop_version/src/SteamNetwork.c
Original file line number Diff line number Diff line change
Expand Up @@ -234,11 +234,11 @@ void STEAM_shutdown(void)
}
}

void STEAM_update(const char* area, const char* roomname)
int32_t STEAM_update(void)
{
if (!libHandle)
{
return;
return 0;
}

SteamAPI_ManualDispatch_RunFrame(steamPipe);
Expand All @@ -252,6 +252,7 @@ void STEAM_update(const char* area, const char* roomname)
}
SteamAPI_ManualDispatch_FreeLastCallback(steamPipe);
}
return 1;
}

void STEAM_unlockAchievement(const char* name)
Expand All @@ -266,4 +267,9 @@ void STEAM_unlockAchievement(const char* name)
}
}

void STEAM_setRPC(const char* area, const char* roomname)
{
// TODO: implement staem rpc :)
}

#endif /* MAKEANDPLAY */
12 changes: 10 additions & 2 deletions desktop_version/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ static volatile Uint64 f_timePrev = 0;
// RPC variables
static const char* rpcArea = "";
static const char* rpcRoomname = "";
static const char* old_rpcArea = "";
static const char* old_rpcRoomname = "";



enum FuncType
{
Expand Down Expand Up @@ -999,8 +1003,12 @@ static enum LoopCode loop_begin(void)
if (map.custommode) {
rpcArea = game.customleveltitle.c_str();
}
// Update network APIs once per frame
NETWORK_update(rpcArea, rpcRoomname);
// Update network APIs once per frame (nested in if loop)
if( NETWORK_update() && ( SDL_strcmp(rpcArea, old_rpcArea) != 0 || SDL_strcmp(rpcRoomname, old_rpcRoomname) != 0 ) )
NETWORK_setRPC(rpcArea, rpcRoomname);

old_rpcArea = rpcArea;
old_rpcRoomname = rpcRoomname;

return Loop_continue;
}
Expand Down

0 comments on commit bf9dd78

Please sign in to comment.