mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
Use queue for processing RPC message backlog
This commit is contained in:
parent
eb7b8d84af
commit
1288299dcc
@ -6,9 +6,6 @@ using System.Windows.Threading;
|
|||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
|
||||||
using Bloxstrap.Models.SettingTasks.Base;
|
using Bloxstrap.Models.SettingTasks.Base;
|
||||||
using Bloxstrap.UI.Elements.About.Pages;
|
|
||||||
using Bloxstrap.UI.Elements.About;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Bloxstrap
|
namespace Bloxstrap
|
||||||
{
|
{
|
||||||
|
@ -9,7 +9,7 @@ namespace Bloxstrap.Integrations
|
|||||||
|
|
||||||
private DiscordRPC.RichPresence? _currentPresence;
|
private DiscordRPC.RichPresence? _currentPresence;
|
||||||
private DiscordRPC.RichPresence? _currentPresenceCopy;
|
private DiscordRPC.RichPresence? _currentPresenceCopy;
|
||||||
private Message? _stashedRPCMessage;
|
private Queue<Message> _messageQueue = new();
|
||||||
|
|
||||||
private bool _visible = true;
|
private bool _visible = true;
|
||||||
private long _currentUniverseId;
|
private long _currentUniverseId;
|
||||||
@ -17,7 +17,7 @@ namespace Bloxstrap.Integrations
|
|||||||
|
|
||||||
public DiscordRichPresence(ActivityWatcher activityWatcher)
|
public DiscordRichPresence(ActivityWatcher activityWatcher)
|
||||||
{
|
{
|
||||||
const string LOG_IDENT = "DiscordRichPresence::DiscordRichPresence";
|
const string LOG_IDENT = "DiscordRichPresence";
|
||||||
|
|
||||||
_activityWatcher = activityWatcher;
|
_activityWatcher = activityWatcher;
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ namespace Bloxstrap.Integrations
|
|||||||
_rpcClient.Initialize();
|
_rpcClient.Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ProcessRPCMessage(Message message)
|
public void ProcessRPCMessage(Message message, bool implicitUpdate = true)
|
||||||
{
|
{
|
||||||
const string LOG_IDENT = "DiscordRichPresence::ProcessRPCMessage";
|
const string LOG_IDENT = "DiscordRichPresence::ProcessRPCMessage";
|
||||||
|
|
||||||
@ -56,14 +56,8 @@ namespace Bloxstrap.Integrations
|
|||||||
|
|
||||||
if (_currentPresence is null || _currentPresenceCopy is null)
|
if (_currentPresence is null || _currentPresenceCopy is null)
|
||||||
{
|
{
|
||||||
if (_activityWatcher.ActivityInGame)
|
App.Logger.WriteLine(LOG_IDENT, "Presence is not set, enqueuing message");
|
||||||
{
|
_messageQueue.Enqueue(message);
|
||||||
App.Logger.WriteLine(LOG_IDENT, "Presence is not yet set, but is currently in game, stashing presence set request");
|
|
||||||
_stashedRPCMessage = message;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
App.Logger.WriteLine(LOG_IDENT, "Presence is not set, aborting");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,6 +153,7 @@ namespace Bloxstrap.Integrations
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (implicitUpdate)
|
||||||
UpdatePresence();
|
UpdatePresence();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +178,7 @@ namespace Bloxstrap.Integrations
|
|||||||
App.Logger.WriteLine(LOG_IDENT, "Not in game, clearing presence");
|
App.Logger.WriteLine(LOG_IDENT, "Not in game, clearing presence");
|
||||||
|
|
||||||
_currentPresence = _currentPresenceCopy = null;
|
_currentPresence = _currentPresenceCopy = null;
|
||||||
_stashedRPCMessage = null;
|
_messageQueue.Clear();
|
||||||
|
|
||||||
UpdatePresence();
|
UpdatePresence();
|
||||||
return true;
|
return true;
|
||||||
@ -284,17 +279,13 @@ namespace Bloxstrap.Integrations
|
|||||||
// this is used for configuration from BloxstrapRPC
|
// this is used for configuration from BloxstrapRPC
|
||||||
_currentPresenceCopy = _currentPresence.Clone();
|
_currentPresenceCopy = _currentPresence.Clone();
|
||||||
|
|
||||||
// TODO: use queue for stashing messages
|
if (_messageQueue.Any())
|
||||||
if (_stashedRPCMessage is not null)
|
|
||||||
{
|
{
|
||||||
App.Logger.WriteLine(LOG_IDENT, "Found stashed RPC message, invoking presence set command now");
|
App.Logger.WriteLine(LOG_IDENT, "Processing queued messages");
|
||||||
ProcessRPCMessage(_stashedRPCMessage);
|
ProcessRPCMessage(_messageQueue.Dequeue(), false);
|
||||||
_stashedRPCMessage = null;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdatePresence();
|
UpdatePresence();
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user