diff --git a/NamedPipes/IVisualizerKontract.cs b/NamedPipes/IVisualizerKontract.cs index ebc5896..ecc8fa6 100644 --- a/NamedPipes/IVisualizerKontract.cs +++ b/NamedPipes/IVisualizerKontract.cs @@ -3,20 +3,8 @@ using System.Numerics; using System.Threading.Tasks; namespace NamedPipes; -[Serializable] -public struct Frame(Vector3 translation, Quaternion orientation) -{ - public Vector3 Translation => translation; - public Quaternion Orientation => orientation; -} -[Serializable] -public class DebugObject -{ - public string? Type { get; set; } - public byte[]? Data { get; set; } -} public interface IDebugVisualizer { - Task SetDebugObjectAsync(DebugObject debugObject); + Task SetVisualizerModelAsync(VisualizerModel visualizerModel); Task SetMessageAsync(string message); } diff --git a/NamedPipes/NamedPipeClient.cs b/NamedPipes/NamedPipeClient.cs index 5aab100..233b7ec 100644 --- a/NamedPipes/NamedPipeClient.cs +++ b/NamedPipes/NamedPipeClient.cs @@ -40,11 +40,11 @@ public class NamedPipeClient (string pipeName,string? serverLocation = null, st } } - public async Task SetDebugObjectAsync(DebugObject debugObject) + public async Task SetVisualizerModelAsync(VisualizerModel visualizerModel) { await StartServerAsync().ConfigureAwait(true); - var result = await PipeClient.InvokeAsync(server => server.SetDebugObjectAsync(debugObject)); - Logger("NamedPipeClient.SetDebugObjectAsync: result = " + result); + var result = await PipeClient.InvokeAsync(server => server.SetVisualizerModelAsync(visualizerModel)); + Logger("NamedPipeClient.SetVisualizerModelAsync: result = " + result); return result; } diff --git a/NamedPipes/NamedPipeServer.cs b/NamedPipes/NamedPipeServer.cs index bb7ab14..485e218 100644 --- a/NamedPipes/NamedPipeServer.cs +++ b/NamedPipes/NamedPipeServer.cs @@ -43,13 +43,13 @@ public partial class NamedPipesServer(string pipeName,Action? logger = n } } [ObservableProperty] - public partial DebugObject? DebugObject { get; private set; } + public partial VisualizerModel? VisualizerModel { get; private set; } - public async Task SetDebugObjectAsync(DebugObject debugObject) + public async Task SetVisualizerModelAsync(VisualizerModel visualizerModel) { await Task.Delay(1); - DebugObject = debugObject; - Logger("Received DebugObject of type: " + DebugObject.Type); + VisualizerModel = visualizerModel; + Logger("NamedPipesServer, received object of type: " + visualizerModel.GetType()); return true; } diff --git a/NamedPipes/PipeSerializer.cs b/NamedPipes/PipeSerializer.cs index 609baf7..16f1fa2 100644 --- a/NamedPipes/PipeSerializer.cs +++ b/NamedPipes/PipeSerializer.cs @@ -10,7 +10,7 @@ namespace NamedPipes { if (data.Length == 0) return null; //Log.Trace("PipeSerializer.Deserialize: type = " + type + " , data.length = " + data.Length); - var obj = MessagePackSerializer.Deserialize(type, data, MessagePack.Resolvers.ContractlessStandardResolver.Options); + var obj = MessagePackSerializer.Typeless.Deserialize(data); //if (obj is DebugObject debugObject) //{ // var length = debugObject.Data?.Length ?? 0; @@ -29,7 +29,7 @@ namespace NamedPipes // Log.Trace("PipeSerializer.Deserialize: debugObject.Type = " + debugObject.Type + " , debugObject.Data.Length = " + length); //} - var bytearray = MessagePackSerializer.Serialize(o.GetType(), o, MessagePack.Resolvers.ContractlessStandardResolver.Options); + var bytearray = MessagePackSerializer.Typeless.Serialize(o); //var xxx = Deserialize(bytearray, o.GetType()); //Log.Trace("PipeSerializer.Serialize: type = " + o.GetType() + " , bytearray.length = " + bytearray.Length); return bytearray; diff --git a/NrxVisualizerObjectSource/VisualizerModel.cs b/NamedPipes/VisualizerModel.cs similarity index 80% rename from NrxVisualizerObjectSource/VisualizerModel.cs rename to NamedPipes/VisualizerModel.cs index 9c72b3f..0b81e12 100644 --- a/NrxVisualizerObjectSource/VisualizerModel.cs +++ b/NamedPipes/VisualizerModel.cs @@ -1,9 +1,11 @@ using System; using System.Numerics; using System.Runtime.Serialization; -namespace NrxVisualizerObjectSource; -using Frame = ValueTuple; +using Frame = System.ValueTuple; +namespace NamedPipes; + [DataContract] +[Serializable] public class VisualizerModel { public static Type FrameType => typeof(Frame); diff --git a/NrxDebuggerVisualizerProvider/NrxDebuggerVisualizerProvider.cs b/NrxDebuggerVisualizerProvider/NrxDebuggerVisualizerProvider.cs index 377397c..0ffab4b 100644 --- a/NrxDebuggerVisualizerProvider/NrxDebuggerVisualizerProvider.cs +++ b/NrxDebuggerVisualizerProvider/NrxDebuggerVisualizerProvider.cs @@ -2,7 +2,6 @@ using Microsoft.VisualStudio.Extensibility.DebuggerVisualizers; using Microsoft.VisualStudio.RpcContracts.RemoteUI; using NamedPipes; -using NrxVisualizerObjectSource; using System; using System.Numerics; using System.Threading; @@ -38,6 +37,7 @@ internal sealed class NrxDebuggerVisualizerProvider : DebuggerVisualizerProvider { 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}"); } } diff --git a/NrxDebuggerVisualizerProvider/Vector3VisualizerUserControl.cs b/NrxDebuggerVisualizerProvider/Vector3VisualizerUserControl.cs index b4590b2..0283fec 100644 --- a/NrxDebuggerVisualizerProvider/Vector3VisualizerUserControl.cs +++ b/NrxDebuggerVisualizerProvider/Vector3VisualizerUserControl.cs @@ -1,5 +1,5 @@ using Microsoft.VisualStudio.Extensibility.UI; -using NrxVisualizerObjectSource; +using NamedPipes; namespace NrxDebugVisualizer; diff --git a/NrxVisualizerObjectSource/NrxVisualizerObjectSource.cs b/NrxVisualizerObjectSource/NrxVisualizerObjectSource.cs index c9dde1a..f9cfe35 100644 --- a/NrxVisualizerObjectSource/NrxVisualizerObjectSource.cs +++ b/NrxVisualizerObjectSource/NrxVisualizerObjectSource.cs @@ -1,4 +1,5 @@ using Microsoft.VisualStudio.DebuggerVisualizers; +using NamedPipes; using System; using System.Collections.Generic; using System.ComponentModel; @@ -7,7 +8,6 @@ using System.IO; using System.Linq; using System.Numerics; using Frame = System.ValueTuple; - namespace NrxVisualizerObjectSource; public class NrxVisualizerObjectSource : VisualizerObjectSource { diff --git a/TestClient/Program.cs b/TestClient/Program.cs index 7f38bfa..c60f9dc 100644 --- a/TestClient/Program.cs +++ b/TestClient/Program.cs @@ -2,11 +2,21 @@ using NamedPipes; var count = 0; var message = "Hello World!".ToCharArray(); +VisualizerModel visualizerModel = new VisualizerModel +{ + Content = "Hello from TestClient", + Point = new System.Numerics.Vector3(1, 2, 3), + //Orientation = System.Numerics.Quaternion.Identity, + //PointArray = [new System.Numerics.Vector3(4, 5, 6), new System.Numerics.Vector3(7, 8, 9)], + //Frame = (new System.Numerics.Vector3(10, 11, 12), System.Numerics.Quaternion.Identity, 1.0f), + //FrameArray = [(new System.Numerics.Vector3(13, 14, 15), System.Numerics.Quaternion.Identity, 2.0f), (new System.Numerics.Vector3(16, 17, 18), System.Numerics.Quaternion.Identity, 3.0f)] +}; while (true) { var pipeClient = new NamedPipeClient("testPipe",@".\","TestServer",logger:Console.WriteLine); Thread.Sleep(1000); + await pipeClient.SetVisualizerModelAsync(visualizerModel); pipeClient.SetMessageAsync($"Hello from TestClient " + count++).GetAwaiter().GetResult(); - pipeClient.SetDebugObjectAsync(new DebugObject{Type = typeof(string).FullName,Data = Encoding.GetEncoding("UTF-8").GetBytes(message)}).GetAwaiter().GetResult(); + //pipeClient.SetDebugObjectAsync(new DebugObject{Type = typeof(string).FullName,Data = Encoding.GetEncoding("UTF-8").GetBytes(message)}).GetAwaiter().GetResult(); pipeClient.Dispose(); }