using NamedPipes; using NrxDebugVisualizer.Scenes; using Num.Roto.Visualization.Math.Geometry; using Num.Roto.Visualization.Math.Utilities; using System; using System.Collections.Generic; using System.Linq; using System.Numerics; using System.Threading; namespace NrxDebugVisualizer.Models; internal sealed class PipeServer { private string PipeName { get; } private NamedPipesServer? NamedPipesServer { get; set; } private Action UpdateAction { get; init; } public PipeServer(string pipeName, Action updateAction,CancellationToken cancellationToken) { PipeName = pipeName; UpdateAction = updateAction; StartPipeServer(cancellationToken); } private void NamedPipesServer_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName != nameof(NamedPipesServer.VisualizerModel)) return; var visualizerObject = NamedPipesServer?.VisualizerModel; if (visualizerObject is null) return; UpdateAction(visualizerObject); } #region NamedPipesServer private async void StartPipeServer(CancellationToken cancellationToken) { NamedPipesServer = new NamedPipesServer(PipeName, logger: (s) => Log.Info(s,0)); NamedPipesServer.PropertyChanged += NamedPipesServer_PropertyChanged; await NamedPipesServer.RunAsync(cancellationToken).ConfigureAwait(false); } #endregion }