From ef5e7f389c905a06ecf7ab88eb9a560ffe5541aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Spie=C3=9F?= Date: Fri, 24 Aug 2018 20:05:01 +0200 Subject: [PATCH] Add persistent presence and handlers --- src/discord_rpc.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/discord_rpc.cpp b/src/discord_rpc.cpp index 2e44c93..dae3ac0 100644 --- a/src/discord_rpc.cpp +++ b/src/discord_rpc.cpp @@ -62,6 +62,7 @@ static int LastDisconnectErrorCode{0}; static char LastDisconnectErrorMessage[256]; static std::mutex PresenceMutex; static std::mutex HandlerMutex; +static DiscordRichPresence CurrentPresence{}; static QueuedMessage QueuedPresence{}; static MsgQueue SendQueue; static MsgQueue JoinAskQueue; @@ -310,6 +311,7 @@ extern "C" DISCORD_EXPORT void Discord_Initialize(const char* applicationId, Connection = RpcConnection::Create(applicationId); Connection->onConnect = [](JsonDocument& readyMessage) { Discord_UpdateHandlers(&QueuedHandlers); + Discord_UpdatePresence(&CurrentPresence); auto data = GetObjMember(&readyMessage, "data"); auto user = GetObjMember(data, "user"); auto userId = GetStrMember(user, "id"); @@ -335,10 +337,6 @@ extern "C" DISCORD_EXPORT void Discord_Initialize(const char* applicationId, Connection->onDisconnect = [](int err, const char* message) { LastDisconnectErrorCode = err; StringCopy(LastDisconnectErrorMessage, message); - { - std::lock_guard guard(HandlerMutex); - Handlers = {}; - } WasJustDisconnected.exchange(true); UpdateReconnectTime(); }; @@ -354,6 +352,7 @@ extern "C" DISCORD_EXPORT void Discord_Shutdown(void) Connection->onConnect = nullptr; Connection->onDisconnect = nullptr; Handlers = {}; + CurrentPresence = {}; if (IoThread != nullptr) { IoThread->Stop(); delete IoThread; @@ -370,6 +369,12 @@ extern "C" DISCORD_EXPORT void Discord_UpdatePresence(const DiscordRichPresence* QueuedPresence.length = JsonWriteRichPresenceObj( QueuedPresence.buffer, sizeof(QueuedPresence.buffer), Nonce++, Pid, presence); } + if (presence) { + CurrentPresence = *presence; + } + else { + CurrentPresence = {}; + } SignalIOActivity(); }