Use queue for processing RPC message backlog

This commit is contained in:
pizzaboxer 2024-08-29 11:20:37 +01:00
parent eb7b8d84af
commit 1288299dcc
No known key found for this signature in database
GPG Key ID: 59D4A1DBAD0F2BA8
2 changed files with 13 additions and 25 deletions

View File

@ -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
{ {

View File

@ -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;
} }