Allow for disconnect/reconnect.

This commit is contained in:
Chris Marsh 2017-08-03 10:47:27 -07:00
parent 54bef63d67
commit 0271889b2e
3 changed files with 35 additions and 9 deletions

View file

@ -75,6 +75,18 @@ static int prompt(char* line, size_t size)
return res;
}
static void discordInit()
{
DiscordEventHandlers handlers;
memset(&handlers, 0, sizeof(handlers));
handlers.ready = handleDiscordReady;
handlers.disconnected = handleDiscordDisconnected;
handlers.errored = handleDiscordError;
handlers.joinGame = handleDiscordJoin;
handlers.spectateGame = handleDiscordSpectate;
Discord_Initialize(APPLICATION_ID, &handlers, 1);
}
static void gameLoop()
{
char line[512];
@ -88,6 +100,19 @@ static void gameLoop()
if (line[0] == 'q') {
break;
}
if (line[0] == 't') {
printf("Shutting off Discord.\n");
Discord_Shutdown();
continue;
}
if (line[0] == 'y') {
printf("Reinit Discord.\n");
discordInit();
continue;
}
if (time(NULL) & 1) {
printf("I don't understand that.\n");
}
@ -113,15 +138,7 @@ static void gameLoop()
int main(int argc, char* argv[])
{
DiscordEventHandlers handlers;
memset(&handlers, 0, sizeof(handlers));
handlers.ready = handleDiscordReady;
handlers.disconnected = handleDiscordDisconnected;
handlers.errored = handleDiscordError;
handlers.joinGame = handleDiscordJoin;
handlers.spectateGame = handleDiscordSpectate;
Discord_Initialize(APPLICATION_ID, &handlers, 1);
discordInit();
gameLoop();

View file

@ -223,6 +223,10 @@ extern "C" void Discord_Initialize(const char* applicationId,
Handlers = {};
}
if (Connection) {
return;
}
Connection = RpcConnection::Create(applicationId);
Connection->onConnect = []() {
WasJustConnected.exchange(true);
@ -244,12 +248,16 @@ extern "C" void Discord_Initialize(const char* applicationId,
};
#ifndef DISCORD_DISABLE_IO_THREAD
KeepRunning.store(true);
IoThread = std::thread(DiscordRpcIo);
#endif
}
extern "C" void Discord_Shutdown()
{
if (!Connection) {
return;
}
Connection->onConnect = nullptr;
Connection->onDisconnect = nullptr;
Handlers = {};

View file

@ -17,6 +17,7 @@ static RpcConnection Instance;
{
c->Close();
BaseConnection::Destroy(c->connection);
c = nullptr;
}
void RpcConnection::Open()