diff --git a/NamedPipes/NamedPipeClient.cs b/NamedPipes/NamedPipeClient.cs index 7b2f3a5..31f4301 100644 --- a/NamedPipes/NamedPipeClient.cs +++ b/NamedPipes/NamedPipeClient.cs @@ -1,6 +1,4 @@ using PipeMethodCalls; - -using PipeMethodCalls.NetJson; using System; using System.Diagnostics; using System.IO; @@ -11,7 +9,7 @@ namespace NamedPipes; public class NamedPipeClient (string pipeName,string? serverLocation = null, string? serverName = null,Action? logger = null): IDebugVisualizer, IDisposable { private bool IsConnected => PipeClient.State == PipeState.Connected; - private PipeClient PipeClient { get; } = new(new NetJsonPipeSerializer(), pipeName); + private PipeClient 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 Logger { get;} = logger ??((m) => Trace.WriteLine(m)); @@ -32,7 +30,7 @@ public class NamedPipeClient (string pipeName,string? serverLocation = null, st try { await PipeClient.ConnectAsync().ConfigureAwait(true); - Logger("NamedPipeClient.StartServerAsync succeded."); + Logger("NamedPipeClient.StartServerAsync succeeded."); return; } catch(Exception e) diff --git a/NamedPipes/NamedPipeServer.cs b/NamedPipes/NamedPipeServer.cs index 6b410b6..d4621b0 100644 --- a/NamedPipes/NamedPipeServer.cs +++ b/NamedPipes/NamedPipeServer.cs @@ -1,7 +1,6 @@ using CommunityToolkit.Mvvm.ComponentModel; using PipeMethodCalls; -using PipeMethodCalls.NetJson; using System; using System.Diagnostics; using System.Threading.Tasks; @@ -25,7 +24,7 @@ public partial class NamedPipesServer(string pipeName,Action? logger = n if (PipeServer == null || PipeServer.State != PipeState.Connected) { PipeServer?.Dispose(); - PipeServer = new PipeServer(new NetJsonPipeSerializer(), PipeName, () => this); + PipeServer = new PipeServer(new PipeSerializer(), PipeName, () => this); PipeServer.SetLogger((m) => Trace.WriteLine(m)); } Logger("Waiting for client connection..."); diff --git a/NamedPipes/NamedPipes.csproj b/NamedPipes/NamedPipes.csproj index 524c06b..2316464 100644 --- a/NamedPipes/NamedPipes.csproj +++ b/NamedPipes/NamedPipes.csproj @@ -9,7 +9,8 @@ - + + diff --git a/NamedPipes/PipeSerializer.cs b/NamedPipes/PipeSerializer.cs new file mode 100644 index 0000000..45b136d --- /dev/null +++ b/NamedPipes/PipeSerializer.cs @@ -0,0 +1,27 @@ +using PipeMethodCalls; +using System; +using System.IO; +using System.Text.Json; + +namespace NamedPipes; + +/// +/// Serializes pipe method call information with System.Text.Json. +/// +public class PipeSerializer : IPipeSerializer +{ + public object Deserialize(byte[] data, Type type) + { + return JsonSerializer.Deserialize(data, type) ?? throw new InvalidDataException($"Can not deserialize to type: {type} "); + } + + public byte[] Serialize(object o) + { + using (var memoryStream = new MemoryStream()) + using (var utf8JsonWriter = new Utf8JsonWriter(memoryStream)) + { + JsonSerializer.Serialize(utf8JsonWriter, o); + return memoryStream.ToArray(); + } + } +} diff --git a/NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj b/NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj index 7ea4a5f..c4bdf20 100644 --- a/NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj +++ b/NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj @@ -17,7 +17,6 @@ - diff --git a/NrxDebuggerVisualizerProvider/NrxDebuggerVisualizerProvider.cs b/NrxDebuggerVisualizerProvider/NrxDebuggerVisualizerProvider.cs index 0ffab4b..cc3070a 100644 --- a/NrxDebuggerVisualizerProvider/NrxDebuggerVisualizerProvider.cs +++ b/NrxDebuggerVisualizerProvider/NrxDebuggerVisualizerProvider.cs @@ -27,17 +27,17 @@ internal sealed class NrxDebuggerVisualizerProvider : DebuggerVisualizerProvider public override async Task CreateVisualizerAsync(VisualizerTarget visualizerTarget, CancellationToken cancellationToken) { VisualizerModel? model = await visualizerTarget.ObjectSource.RequestDataAsync(jsonSerializer: null, cancellationToken); - SendToVisualizer(model); + await SendToVisualizerAsync(model); //throw new InvalidOperationException("This is a test exception to demonstrate the visualizer. Please remove this line and implement the visualizer logic."); var control = new Vector3VisualizerUserControl(dataContext: model); return await Task.FromResult(control); } private static NamedPipeClient? PipeClient { get; set; } - private static void SendToVisualizer(VisualizerModel? visualizerModel) + private static async Task SendToVisualizerAsync(VisualizerModel? visualizerModel) { if (visualizerModel is null) return; PipeClient ??= new NamedPipeClient("testPipe", serverName: @"TestServer", logger: (m) => Console.WriteLine(m)); - _ = PipeClient.SetVisualizerModelAsync(visualizerModel); - _ = PipeClient.SetMessageAsync($"Hello from {nameof(CreateVisualizerAsync)},visualizerModel.Content = {visualizerModel.Content}"); + await PipeClient.SetVisualizerModelAsync(visualizerModel); + await PipeClient.SetMessageAsync($"Hello from {nameof(CreateVisualizerAsync)},visualizerModel.Content = {visualizerModel.Content}"); } }