Always run overlay when running VRCX in debug mode

This commit is contained in:
Natsumi
2026-01-20 12:18:20 +13:00
parent cf43938fd3
commit 62e21d54fb
4 changed files with 20 additions and 15 deletions
+3 -1
View File
@@ -17,8 +17,10 @@ public static class OverlayClient
private static readonly Uri WebsocketUri = new("ws://127.0.0.1:34582"); private static readonly Uri WebsocketUri = new("ws://127.0.0.1:34582");
private static WebsocketClient? _websocketClient; private static WebsocketClient? _websocketClient;
public static bool Connected =>
_websocketClient != null && _websocketClient.IsRunning;
public static bool ConnectedAndActive => public static bool ConnectedAndActive =>
_websocketClient != null && _websocketClient.IsRunning && Connected &&
OverlayProgram.VRCXVRInstance.IsActive(); OverlayProgram.VRCXVRInstance.IsActive();
public static async Task Init() public static async Task Init()
+3 -1
View File
@@ -42,7 +42,9 @@ internal static class OverlayProgram
private static async Task QuitProcess() private static async Task QuitProcess()
{ {
await Task.Delay(5000); await Task.Delay(5000);
while (OverlayClient.ConnectedAndActive) while (Program.LaunchDebug ?
OverlayClient.Connected :
OverlayClient.ConnectedAndActive)
{ {
await Task.Delay(500); await Task.Delay(500);
} }
+12 -12
View File
@@ -16,20 +16,20 @@ namespace VRCX;
public class OverlayServer public class OverlayServer
{ {
public static OverlayServer Instance { get; private set; } public static OverlayServer Instance { get; private set; }
private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private static readonly Logger logger = LogManager.GetCurrentClassLogger();
private static readonly Lock SendLock = new(); private static readonly Lock SendLock = new();
private static readonly ConcurrentDictionary<WebSocket, byte> ConnectedWebSockets = new(); private static readonly ConcurrentDictionary<WebSocket, byte> ConnectedWebSockets = new();
private static CancellationTokenSource _cancellationToken; private static CancellationTokenSource _cancellationToken;
private static OverlayVars _overlayVars; private static OverlayVars _overlayVars;
static OverlayServer() static OverlayServer()
{ {
Instance = new OverlayServer(); Instance = new OverlayServer();
} }
public async Task Init() public async Task Init()
{ {
if (_cancellationToken != null && _cancellationToken.IsCancellationRequested) if (_cancellationToken != null && _cancellationToken.IsCancellationRequested)
@@ -66,7 +66,7 @@ public class OverlayServer
{ {
if (_cancellationToken == null || _cancellationToken.IsCancellationRequested) if (_cancellationToken == null || _cancellationToken.IsCancellationRequested)
return; return;
foreach (var webSocket in ConnectedWebSockets.Keys) foreach (var webSocket in ConnectedWebSockets.Keys)
{ {
if (webSocket == null || webSocket.State != WebSocketState.Open) if (webSocket == null || webSocket.State != WebSocketState.Open)
@@ -90,7 +90,7 @@ public class OverlayServer
{ {
WebSocketContext webSocketContext; WebSocketContext webSocketContext;
try try
{ {
webSocketContext = await listenerContext.AcceptWebSocketAsync(null); webSocketContext = await listenerContext.AcceptWebSocketAsync(null);
} }
catch (Exception e) catch (Exception e)
@@ -100,7 +100,7 @@ public class OverlayServer
logger.Error(e); logger.Error(e);
return; return;
} }
var webSocket = webSocketContext.WebSocket; var webSocket = webSocketContext.WebSocket;
try try
{ {
@@ -117,7 +117,7 @@ public class OverlayServer
var message = JsonSerializer.Deserialize<OverlayMessage>(text); var message = JsonSerializer.Deserialize<OverlayMessage>(text);
HandleMessage(message); HandleMessage(message);
continue; continue;
case WebSocketMessageType.Close: case WebSocketMessageType.Close:
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
break; break;
@@ -157,7 +157,7 @@ public class OverlayServer
MainForm.Instance.Browser.CanExecuteJavascriptInMainFrame) MainForm.Instance.Browser.CanExecuteJavascriptInMainFrame)
MainForm.Instance.Browser.ExecuteScriptAsync("window?.$pinia?.vr.vrInit();"); MainForm.Instance.Browser.ExecuteScriptAsync("window?.$pinia?.vr.vrInit();");
break; break;
case OverlayMessageType.IsHmdAfk: case OverlayMessageType.IsHmdAfk:
var isHmdAfk = string.Equals(message.Data, "true", StringComparison.OrdinalIgnoreCase); var isHmdAfk = string.Equals(message.Data, "true", StringComparison.OrdinalIgnoreCase);
if (MainForm.Instance?.Browser != null && !MainForm.Instance.Browser.IsLoading && MainForm.Instance.Browser.CanExecuteJavascriptInMainFrame) if (MainForm.Instance?.Browser != null && !MainForm.Instance.Browser.IsLoading && MainForm.Instance.Browser.CanExecuteJavascriptInMainFrame)
@@ -170,7 +170,7 @@ public class OverlayServer
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();
} }
} }
public void SendMessage(OverlayMessage message) public void SendMessage(OverlayMessage message)
{ {
lock (SendLock) lock (SendLock)
@@ -191,12 +191,12 @@ public class OverlayServer
public void UpdateVars(OverlayVars overlayVars) public void UpdateVars(OverlayVars overlayVars)
{ {
_overlayVars = overlayVars; _overlayVars = overlayVars;
if (!IsConnected() && overlayVars.Active) if (!IsConnected() && (overlayVars.Active || Program.LaunchDebug))
{ {
OverlayManager.StartOverlay(); OverlayManager.StartOverlay();
return; return;
} }
var helloMessage = new OverlayMessage var helloMessage = new OverlayMessage
{ {
Type = OverlayMessageType.UpdateVars, Type = OverlayMessageType.UpdateVars,
+2 -1
View File
@@ -418,6 +418,7 @@ export const useSharedFeedStore = defineStore('SharedFeed', () => {
loadSharedFeed, loadSharedFeed,
sendSharedFeed, sendSharedFeed,
addEntry, addEntry,
addTag addTag,
sharedFeedData
}; };
}); });