From 674ca83ba9243a9e95a7568c797668dab6aee26a Mon Sep 17 00:00:00 2001 From: Lucas Faria Mendes Date: Mon, 30 Mar 2026 10:35:25 -0300 Subject: feat: upload files --- Gestor.Application/Helpers/PipeServer.cs | 115 +++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Gestor.Application/Helpers/PipeServer.cs (limited to 'Gestor.Application/Helpers/PipeServer.cs') diff --git a/Gestor.Application/Helpers/PipeServer.cs b/Gestor.Application/Helpers/PipeServer.cs new file mode 100644 index 0000000..fa42e03 --- /dev/null +++ b/Gestor.Application/Helpers/PipeServer.cs @@ -0,0 +1,115 @@ +using Assinador.Model.Common; +using Gestor.Application.Actions; +using Newtonsoft.Json; +using System; +using System.IO; +using System.IO.Pipes; +using System.Runtime.CompilerServices; +using System.Security.AccessControl; +using System.Security.Principal; + +namespace Gestor.Application.Helpers +{ + public class PipeServer : IDisposable + { + private string _pipeName; + + private NamedPipeServerStream Pipe + { + get; + set; + } + + public PipeServer() + { + } + + private bool Create() + { + bool flag; + bool flag1 = true; + try + { + (new NamedPipeClientStream(".", this._pipeName, PipeDirection.Out, PipeOptions.Asynchronous)).Connect(1000); + } + catch (TimeoutException timeoutException) + { + flag1 = false; + } + catch (Exception exception) + { + flag = false; + return flag; + } + if (flag1) + { + return true; + } + try + { + PipeSecurity pipeSecurity = new PipeSecurity(); + SecurityIdentifier securityIdentifier = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); + securityIdentifier.Translate(typeof(NTAccount)); + pipeSecurity.SetAccessRule(new PipeAccessRule(securityIdentifier, PipeAccessRights.ReadWrite, AccessControlType.Allow)); + this.Pipe = new NamedPipeServerStream(this._pipeName, PipeDirection.In, 1, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 1, 1, pipeSecurity); + this.Pipe.BeginWaitForConnection(new AsyncCallback(this.WaitForConnectionCallBack), this.Pipe); + return true; + } + catch (Exception exception1) + { + flag = false; + } + return flag; + } + + public bool CreateServer(string name) + { + this._pipeName = name; + return this.Create(); + } + + public void Dispose() + { + this.Pipe.Dispose(); + } + + private void Handle(string message) + { + if (message == null) + { + return; + } + PipeMessageResult pipeMessageResult = JsonConvert.DeserializeObject(message); + Action acessarHoster = Gestor.Application.Actions.Actions.AcessarHoster; + if (acessarHoster == null) + { + return; + } + acessarHoster(pipeMessageResult); + } + + private void WaitForConnectionCallBack(IAsyncResult iar) + { + try + { + NamedPipeServerStream asyncState = (NamedPipeServerStream)iar.AsyncState; + asyncState.EndWaitForConnection(iar); + using (StreamReader streamReader = new StreamReader(this.Pipe)) + { + string str = streamReader.ReadLine(); + if ((str == null ? false : str.IndexOf("exit", StringComparison.InvariantCultureIgnoreCase) > -1)) + { + this.Dispose(); + } + this.Handle(str); + } + asyncState.Close(); + asyncState = null; + this.Create(); + } + catch + { + } + } + } +} \ No newline at end of file -- cgit v1.2.3