Using static NamedPipeClient? PipeClient { get; set; } in Vector3DebuggerVisualizerProvider works.

new VisualizerTargetType("Frame Array Visualizer", "Num.Roto.Visualization.Math.Geometry.Frame[]
This commit is contained in:
Matthias Heil
2026-04-01 15:47:54 +02:00
parent cce0740f72
commit 406a0f4067
12 changed files with 111 additions and 41 deletions

View File

@@ -9,7 +9,7 @@ namespace NamedPipes;
public class NamedPipeClient (string pipeName,string? serverLocation = null, string? serverName = null,Action<string>? logger = null): IDebugVisualizer, IDisposable
{
private bool IsConnected => PipeClient.State == PipeState.Connected;
private PipeClient<IDebugVisualizer> PipeClient { get; }= new(new PipeSerializer(), pipeName);
private PipeClient<IDebugVisualizer> PipeClient { get; } = new(new PipeSerializer(), pipeName);
private string ServerLocation { get; } = serverLocation ?? Environment.GetEnvironmentVariable("USERPROFILE") + @"\Documents\Visual Studio 2026\Visualizers\Server\NrxVisualizer\";
private string ServerName { get; } = serverName ?? "Num.Roto.Nrx.VisualizerServer";
private Action<string> Logger { get;} = logger ??((m) => Trace.WriteLine(m));
@@ -19,29 +19,40 @@ public class NamedPipeClient (string pipeName,string? serverLocation = null, st
if (IsConnected) return;
PipeClient.SetLogger((m) => Trace.WriteLine(m));
var serverAvailable = Process.GetProcessesByName(ServerName).Length > 0;
Logger($"Server available: {serverAvailable}");
if (!serverAvailable)
{
var serverPath = ServerLocation + ServerName + ".exe";
if (!File.Exists(serverPath)) throw new FileNotFoundException(serverPath);
if (!File.Exists(serverPath)) throw new FileNotFoundException($"{nameof(StartServerAsync)}, Server does not exist, Path = {serverPath}");
var server = new Process { StartInfo = { FileName = serverPath } };
server.Start();
}
await PipeClient.ConnectAsync();
}
try
{
await PipeClient.ConnectAsync().ConfigureAwait(true);
Logger("NamedPipeClient.StartServerAsync succeded.");
return;
}
catch(Exception e)
{
Logger(e.ToString());
throw;
}
}
public async Task<bool> SetDebugObjectAsync(DebugObject debugObject)
{
await StartServerAsync();
var result = PipeClient.InvokeAsync(server => server.SetDebugObjectAsync(debugObject)).Result;
Logger("NamedPipeClient.SetDebugObject: result = " + result);
await StartServerAsync().ConfigureAwait(true);
var result = await PipeClient.InvokeAsync(server => server.SetDebugObjectAsync(debugObject));
Logger("NamedPipeClient.SetDebugObjectAsync: result = " + result);
return result;
}
public async Task<bool> SetMessageAsync(string message)
{
await StartServerAsync();
var result = PipeClient.InvokeAsync(server => server.SetMessageAsync(message)).Result;
Logger("NamedPipeClient.SetMessage: result = " + result);
await StartServerAsync().ConfigureAwait(true);
var result = await PipeClient.InvokeAsync(server => server.SetMessageAsync(message));
Logger("NamedPipeClient.SetMessageAsync: result = " + result);
return result;
}