ソースを参照

Fixed file rename

Kenric Nugteren 2 年 前
コミット
4a1e87a907

+ 10 - 63
inabox.client.ipc/IPCClient.cs

@@ -14,25 +14,7 @@ namespace InABox.IPC
     {
         private IPCClientTransport _clientTransport;
 
-<<<<<<< Updated upstream
-        public delegate void ConnectEvent();
-        public delegate void DisconnectEvent();
-
-        /// <summary>
-        /// A handler for any requests pushed from the server, i.e., not initialised by the client.
-        /// </summary>
-        public delegate void PushEvent(PipeRequest request);
-
-        public bool Disconnected { get; private set; }
-
-        public event ConnectEvent? OnConnect;
-        public event DisconnectEvent? OnDisconnect;
-        public event PushEvent? OnPush;
-
-        public IPCClient(string name)
-=======
         public IPCClient(string pipeName)
->>>>>>> Stashed changes
         {
             _clientTransport = IPCClientFactory.GetClient(pipeName);
             Timeout = TimeSpan.FromSeconds(300);
@@ -87,7 +69,7 @@ namespace InABox.IPC
 
         protected override bool DoCheck2FA(string code, Guid? session)
         {
-            var request = new Check2FARequest { Code = code };
+            var request = new Check2FARequest(code);
 
             PrepareRequest(request);
 
@@ -130,7 +112,7 @@ namespace InABox.IPC
         
         protected override void DoDelete(TEntity entity, string auditnote)
         {
-            var request = new DeleteRequest<TEntity> { Item = entity };
+            var request = new DeleteRequest<TEntity>(entity, auditnote);
             PrepareRequest(request);
 
             var response = Send(IPCRequest.Delete(request)).GetResponse<DeleteResponse<TEntity>>();
@@ -148,7 +130,7 @@ namespace InABox.IPC
         protected override void DoDelete(IList<TEntity> entities, string auditnote)
         {
             var items = entities.ToArray();
-            var request = new MultiDeleteRequest<TEntity> { Items = items, AuditNote = auditnote };
+            var request = new MultiDeleteRequest<TEntity>(items, auditnote);
             PrepareRequest(request);
 
             var response = Send(IPCRequest.MultiDelete(request)).GetResponse<MultiDeleteResponse<TEntity>>();
@@ -163,13 +145,9 @@ namespace InABox.IPC
             }
         }
 
-        protected override TEntity[] DoLoad(Filter<TEntity> filter = null, SortOrder<TEntity> sort = null)
+        protected override TEntity[] DoLoad(Filter<TEntity>? filter = null, SortOrder<TEntity>? sort = null)
         {
-            var request = new QueryRequest<TEntity>
-            {
-                Filter = filter,
-                Sort = sort
-            };
+            var request = new QueryRequest<TEntity>(filter, null, sort);
             PrepareRequest(request);
 
             var result = new List<TEntity>();
@@ -182,12 +160,7 @@ namespace InABox.IPC
 
         protected override CoreTable DoQuery(Filter<TEntity>? filter, Columns<TEntity>? columns, SortOrder<TEntity>? sort = null)
         {
-            var request = new QueryRequest<TEntity>
-            {
-                Columns = columns,
-                Filter = filter,
-                Sort = sort
-            };
+            var request = new QueryRequest<TEntity>(filter, columns, sort);
             PrepareRequest(request);
 
             var response = Send(IPCRequest.Query(request)).GetResponse<QueryResponse<TEntity>>();
@@ -207,19 +180,10 @@ namespace InABox.IPC
 
         protected override Dictionary<string, CoreTable> DoQueryMultiple(Dictionary<string, IQueryDef> queries)
         {
-            var request = new MultiQueryRequest
-            {
-                TableTypes = new(),
-                Filters = new(),
-                Columns = new(),
-                Sorts = new()
-            };
+            var request = new MultiQueryRequest();
             foreach (var item in queries)
             {
-                request.TableTypes[item.Key] = item.Value.Type.EntityName();
-                request.Filters[item.Key] = Serialization.Serialize(item.Value.Filter);
-                request.Columns[item.Key] = Serialization.Serialize(item.Value.Columns);
-                request.Sorts[item.Key] = Serialization.Serialize(item.Value.SortOrder);
+                request.AddQuery(item.Key, item.Value);
             }
             PrepareRequest(request);
 
@@ -239,10 +203,8 @@ namespace InABox.IPC
 
         protected override void DoSave(TEntity entity, string auditnote)
         {
-            var request = new SaveRequest<TEntity>
+            var request = new SaveRequest<TEntity>(entity, auditnote)
             {
-                Item = entity,
-                AuditNote = auditnote,
                 ReturnOnlyChanged = true
             };
             PrepareRequest(request);
@@ -284,10 +246,8 @@ namespace InABox.IPC
         protected override void DoSave(IEnumerable<TEntity> entities, string auditnote)
         {
             var items = entities.ToArray();
-            var request = new MultiSaveRequest<TEntity>
+            var request = new MultiSaveRequest<TEntity>(items, auditnote)
             {
-                Items = items,
-                AuditNote = auditnote,
                 ReturnOnlyChanged = true
             };
             PrepareRequest(request);
@@ -365,21 +325,8 @@ namespace InABox.IPC
             }
             else
             {
-<<<<<<< Updated upstream
-                Task.Run(() =>
-                {
-                    OnPush?.Invoke(e.Message);
-                }).ContinueWith(task =>
-                {
-                    if (task.Exception != null)
-                    {
-                        Logger.Send(LogType.Error, "", $"Error in IPC Client Push: {CoreUtils.FormatException(task.Exception)}");
-                    }
-                });
-=======
                 request.UserID = userid;
                 request.Password = password;
->>>>>>> Stashed changes
             }
             request.Credentials.Platform = ClientFactory.Platform;
             request.Credentials.Version = ClientFactory.Version;

+ 19 - 3
inabox.client.ipc/IPCClientTransport.cs

@@ -1,6 +1,7 @@
 using H.Pipes;
 using InABox.Core;
 using InABox.IPC;
+using InABox.IPC.Shared;
 using System.Collections.Concurrent;
 
 namespace InABox.Client.IPC
@@ -17,14 +18,20 @@ namespace InABox.Client.IPC
         public delegate void ConnectEvent();
         public delegate void DisconnectEvent();
 
+        /// <summary>
+        /// A handler for any requests pushed from the server, i.e., not initialised by the client.
+        /// </summary>
+        public delegate void PushEvent(PipeRequest request);
+
         public bool Disconnected { get; private set; }
 
         public event ConnectEvent? OnConnect;
         public event DisconnectEvent? OnDisconnect;
+        public event PushEvent? OnPush;
 
-        public IPCClientTransport(string name)
+        public IPCClientTransport(string pipeName)
         {
-            Client = new PipeClient<IPCRequest>(name);
+            Client = new PipeClient<IPCRequest>(pipeName);
             Client.Connected += Client_Connected;
             Client.Disconnected += Client_Disconnected;
             Client.MessageReceived += Client_MessageReceived;
@@ -90,7 +97,16 @@ namespace InABox.Client.IPC
             }
             else
             {
-                Responses[e.Message.RequestID] = e.Message;
+                Task.Run(() =>
+                {
+                    OnPush?.Invoke(e.Message);
+                }).ContinueWith(task =>
+                {
+                    if (task.Exception != null)
+                    {
+                        Logger.Send(LogType.Error, "", $"Error in IPC Client Push: {CoreUtils.FormatException(task.Exception)}");
+                    }
+                });
             }
         }
 

+ 0 - 379
inabox.client.ipc/PipeIPCClient.cs

@@ -1,379 +0,0 @@
-using InABox.Clients;
-using InABox.Core;
-using InABox.IPC.Shared;
-using System;
-using System.Collections;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.CompilerServices;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace InABox.Client.IPC
-{
-    internal static class LocalCache
-    {
-        public static string Password { get; set; }
-
-    }
-
-    public class PipeIPCClient<TEntity> : BaseClient<TEntity> where TEntity : Entity, new()
-    {
-        private IPCClient Client;
-
-        public PipeIPCClient(string pipeName)
-        {
-            Client = IPCClientFactory.GetClient(pipeName);
-            Timeout = TimeSpan.FromSeconds(300);
-        }
-
-        private static string[]? _types;
-        public override string[] SupportedTypes()
-        {
-            _types ??= CoreUtils.Entities
-                .Where(x => x.GetInterfaces().Contains(typeof(IPersistent)))
-                .Select(x => x.EntityName().Replace(".", "_"))
-                .ToArray();
-            return _types;
-        }
-
-        public override DatabaseInfo Info()
-        {
-            try
-            {
-                var request = new InfoRequest();
-                PrepareRequest(request, false);
-                var response = Send(PipeRequest.Info(request)).GetResponse<InfoResponse>();
-                return response.Info;
-            }
-            catch (Exception)
-            {
-                return new DatabaseInfo();
-            }
-        }
-        
-        private void PrepareRequest(Request request, bool doCredentials = true)
-        {
-            if(request is not ValidateRequest && Client.Disconnected)
-            {
-                ClientFactory.Validate(ClientFactory.UserID, LocalCache.Password);
-            }
-
-            if (doCredentials)
-            {
-                request.Credentials.Platform = ClientFactory.Platform;
-                request.Credentials.Version = ClientFactory.Version;
-                request.Credentials.Session = ClientFactory.SessionID;
-            }
-
-            Request.BeforeRequest?.Invoke(request);
-        }
-
-        private PipeRequest Send(PipeRequest request, int? timeout = null)
-        {
-            return Client.Send(request, timeout ?? Convert.ToInt32(Timeout.TotalMilliseconds));
-        }
-
-        protected override bool DoCheck2FA(string code, Guid? session)
-        {
-            var request = new Check2FARequest(code);
-
-            PrepareRequest(request);
-
-            var response = Send(PipeRequest.Check2FA(request)).GetResponse<Check2FAResponse>();
-            if (response != null)
-            {
-                return response.Status switch
-                {
-                    StatusCode.OK => response.Valid,
-                    StatusCode.Unauthenticated => false,
-                    _ => throw new IPCException(response.Messages),
-                };
-            }
-
-            return false;
-        }
-
-        protected override bool DoPing()
-        {
-            try
-            {
-                var request = new PingRequest();
-
-                PrepareRequest(request);
-
-                var response = Send(PipeRequest.Ping(request), 10_000).GetResponse<PingResponse>();
-                if (response != null)
-                {
-                    return response.Status switch
-                    {
-                        StatusCode.Error or StatusCode.BadServer or StatusCode.Incomplete => throw new IPCException(response.Messages),
-                        _ => true
-                    };
-                }
-            }
-            catch (Exception) { }
-
-            return false;
-        }
-        
-        protected override void DoDelete(TEntity entity, string auditnote)
-        {
-            var request = new DeleteRequest<TEntity>(entity, auditnote);
-            PrepareRequest(request);
-
-            var response = Send(PipeRequest.Delete(request)).GetResponse<DeleteResponse<TEntity>>();
-            switch (response.Status)
-            {
-                case StatusCode.OK:
-                    break;
-                case StatusCode.Unauthenticated:
-                    throw new IPCException("Client not authenticated");
-                default:
-                    throw new IPCException(response.Messages);
-            }
-        }
-
-        protected override void DoDelete(IList<TEntity> entities, string auditnote)
-        {
-            var items = entities.ToArray();
-            var request = new MultiDeleteRequest<TEntity>(items, auditnote);
-            PrepareRequest(request);
-
-            var response = Send(PipeRequest.MultiDelete(request)).GetResponse<MultiDeleteResponse<TEntity>>();
-            switch (response.Status)
-            {
-                case StatusCode.OK:
-                    break;
-                case StatusCode.Unauthenticated:
-                    throw new IPCException("Client not authenticated");
-                default:
-                    throw new IPCException(response.Messages);
-            }
-        }
-
-        protected override TEntity[] DoLoad(Filter<TEntity>? filter = null, SortOrder<TEntity>? sort = null)
-        {
-            var request = new QueryRequest<TEntity>(filter, null, sort);
-            PrepareRequest(request);
-
-            var result = new List<TEntity>();
-            var response = Send(PipeRequest.Query(request)).GetResponse<QueryResponse<TEntity>>();
-            if (response.Items != null)
-                foreach (var row in response.Items.Rows)
-                    result.Add(row.ToObject<TEntity>());
-            return result.ToArray();
-        }
-
-        protected override CoreTable DoQuery(Filter<TEntity>? filter, Columns<TEntity>? columns, SortOrder<TEntity>? sort = null)
-        {
-            var request = new QueryRequest<TEntity>(filter, columns, sort);
-            PrepareRequest(request);
-
-            var response = Send(PipeRequest.Query(request)).GetResponse<QueryResponse<TEntity>>();
-
-            if (response != null)
-            {
-                return response.Status switch
-                {
-                    StatusCode.OK => response.Items,
-                    StatusCode.Unauthenticated => throw new IPCException("Client not authenticated", StatusCode.Unauthenticated),
-                    _ => throw new IPCException(response.Messages),
-                };
-            }
-
-            return null;
-        }
-
-        protected override Dictionary<string, CoreTable> DoQueryMultiple(Dictionary<string, IQueryDef> queries)
-        {
-            var request = new MultiQueryRequest();
-            foreach (var item in queries)
-            {
-                request.AddQuery(item.Key, item.Value);
-            }
-            PrepareRequest(request);
-
-            var response = Send(PipeRequest.QueryMultiple(request)).GetResponse<MultiQueryResponse>();
-            if (response != null)
-            {
-                return response.Status switch
-                {
-                    StatusCode.OK => response.Tables,
-                    StatusCode.Unauthenticated => throw new IPCException("Client not authenticated"),
-                    _ => throw new IPCException(response.Messages),
-                };
-            }
-
-            return null;
-        }
-
-        protected override void DoSave(TEntity entity, string auditnote)
-        {
-            var request = new SaveRequest<TEntity>(entity, auditnote)
-            {
-                ReturnOnlyChanged = true
-            };
-            PrepareRequest(request);
-
-            var response = Send(PipeRequest.Save(request)).GetResponse<SaveResponse<TEntity>>();
-            switch (response.Status)
-            {
-                case StatusCode.OK:
-                    /*var props = CoreUtils.PropertyList(typeof(TEntity), x => true, true);
-                    entity.SetObserving(false);
-                    foreach (var prop in props.Keys)
-                    {
-                        var value = CoreUtils.GetPropertyValue(response.Item, prop);
-                        CoreUtils.SetPropertyValue(entity, prop, value);
-                    }
-
-                    entity.CommitChanges();
-                    entity.SetObserving(true);*/
-
-                    entity.SetObserving(false);
-                    foreach (var (key, value) in response.ChangedValues)
-                    {
-                        if (CoreUtils.TryGetProperty<TEntity>(key, out var property))
-                        {
-                            CoreUtils.SetPropertyValue(entity, key, CoreUtils.ChangeType(value, property.PropertyType));
-                        }
-                    }
-                    entity.CommitChanges();
-                    entity.SetObserving(true);
-
-                    break;
-                case StatusCode.Unauthenticated:
-                    throw new IPCException("Client not authenticated");
-                default:
-                    throw new IPCException(response.Messages);
-            }
-        }
-
-        protected override void DoSave(IEnumerable<TEntity> entities, string auditnote)
-        {
-            var items = entities.ToArray();
-            var request = new MultiSaveRequest<TEntity>(items, auditnote)
-            {
-                ReturnOnlyChanged = true
-            };
-            PrepareRequest(request);
-
-            var response = Send(PipeRequest.MultiSave(request)).GetResponse<MultiSaveResponse<TEntity>>();
-            switch (response.Status)
-            {
-                case StatusCode.OK:
-                    /*var props = CoreUtils.PropertyList(typeof(TEntity), x => true, true);
-                    for (var i = 0; i < items.Length; i++)
-                    {
-                        items[i].SetObserving(false);
-                        foreach (var prop in props.Keys)
-                        {
-                            var value = CoreUtils.GetPropertyValue(response.Items[i], prop);
-                            CoreUtils.SetPropertyValue(items[i], prop, value);
-                        }
-
-                        //CoreUtils.DeepClone<TEntity>(response.Items[i], items[i]);
-                        items[i].CommitChanges();
-                        items[i].SetObserving(true);
-                    }*/
-                    for (int i = 0; i < items.Length; ++i)
-                    {
-                        var entity = items[i];
-                        var changedValues = response.ChangedValues[i];
-
-                        entity.SetObserving(false);
-                        foreach (var (key, value) in changedValues)
-                        {
-                            if (CoreUtils.TryGetProperty<TEntity>(key, out var property))
-                            {
-                                CoreUtils.SetPropertyValue(entity, key, CoreUtils.ChangeType(value, property.PropertyType));
-                            }
-                        }
-                        entity.CommitChanges();
-                        entity.SetObserving(true);
-                    }
-                    break;
-                case StatusCode.Unauthenticated:
-                    throw new IPCException("Client not authenticated");
-                default:
-                    throw new IPCException(response.Messages);
-            }
-        }
-
-        protected override ValidationData DoValidate(Guid session)
-        {
-            return Validate(
-                null, null, false, session);
-        }
-
-        protected override ValidationData DoValidate(string pin, Guid session)
-        {
-            return Validate(
-                null, pin, true, session);
-        }
-
-        protected override ValidationData DoValidate(string userid, string password, Guid session)
-        {
-            return Validate(
-                userid, password, false, session);
-        }
-
-        private ValidationData Validate(string? userid, string? password, bool usePin, Guid session = default)
-        {
-            var ticks = DateTime.Now.ToUniversalTime().Ticks.ToString();
-            var request = new ValidateRequest { UsePIN = usePin };
-
-            if (usePin)
-            {
-                request.UserID = Encryption.Encrypt(ticks, "wCq9rryEJEuHIifYrxRjxg", true);
-                request.Password = Encryption.Encrypt(ticks, "7mhvLnqMwkCAzN+zNGlyyg", true);
-                request.PIN = password;
-            }
-            else
-            {
-                request.UserID = userid;
-                request.Password = password;
-            }
-            request.Credentials.Platform = ClientFactory.Platform;
-            request.Credentials.Version = ClientFactory.Version;
-            PrepareRequest(request, false);
-            if(session != Guid.Empty)
-            {
-                request.Credentials.Session = session;
-            }
-
-            var response = Send(PipeRequest.Validate(request), 10000).GetResponse<ValidateResponse>();
-            if (response != null)
-                if (response.Status.Equals(StatusCode.OK))
-                {
-                    LocalCache.Password = password;
-                    return new ValidationData(
-                        response.ValidationResult,
-                        response.UserID,
-                        response.UserGuid,
-                        response.SecurityID,
-                        response.Session,
-                        response.Recipient2FA,
-                        response.PasswordExpiration
-                    );
-                }
-                else if (response.Status == StatusCode.BadServer)
-                {
-                    throw new IPCException(response.Messages);
-                }
-
-            return new ValidationData(
-                ValidationResult.INVALID,
-                "",
-                Guid.Empty,
-                Guid.Empty,
-                Guid.Empty,
-                null,
-                DateTime.MinValue
-                );
-        }
-        
-    }
-}

+ 66 - 16
inabox.ipc.shared/IPCRequest.cs

@@ -29,7 +29,8 @@ namespace InABox.IPC
         Validate,
         Check2FA,
         Ping,
-        Info
+        Info,
+        Notification
     }
 
     [Serializable]
@@ -38,7 +39,8 @@ namespace InABox.IPC
         public Guid RequestID;
         public Method Method;
         public string? Type;
-        public string Data;
+        private string? Data;
+        private byte[]? BinaryData;
 
         [NonSerialized]
         public RequestError ErrorCode;
@@ -49,24 +51,66 @@ namespace InABox.IPC
             Method = method;
             Type = type;
             Data = data;
+            BinaryData = null;
+            ErrorCode = error;
+        }
+        private IPCRequest(Guid requestID, Method method, string? type, byte[] data, RequestError error = RequestError.NONE)
+        {
+            RequestID = requestID;
+            Method = method;
+            Type = type;
+            BinaryData = data;
+            Data = null;
             ErrorCode = error;
         }
 
         public IPCRequest Respond<TResponse>(TResponse response) where TResponse : Response
         {
-            return new IPCRequest(RequestID, Method.None, Type, Serialization.Serialize(response));
+            return CreateRequest(RequestID, Method.None, Type, response);
+        }
+        private static IPCRequest CreateRequest(Guid requestID, Method method, string? type, object? data)
+        {
+            if (data is ISerializeBinary binary)
+            {
+                return new IPCRequest(requestID, method, type, binary.WriteBinary(BinarySerializationSettings.Latest));
+            }
+            {
+                return new IPCRequest(requestID, method, type, Serialization.Serialize(data));
+            }
         }
 
         public TRequest GetRequest<TRequest>()
         {
-            return Serialization.Deserialize<TRequest>(Data);
+            if (BinaryData is not null)
+            {
+                return (TRequest)Serialization.ReadBinary(typeof(TRequest), BinaryData, BinarySerializationSettings.Latest);
+            }
+            else
+            {
+                return Serialization.Deserialize<TRequest>(Data);
+            }
+        }
+        public object? GetRequest(Type TRequest)
+        {
+            if (BinaryData is not null)
+            {
+                return Serialization.ReadBinary(TRequest, BinaryData, BinarySerializationSettings.Latest);
+            }
+            else if(Data is not null)
+            {
+                return Serialization.Deserialize(TRequest, Data);
+            }
+            else
+            {
+                return null;
+            }
         }
 
         public TResponse GetResponse<TResponse>() where TResponse : Response, new()
         {
             var start = DateTime.Now;
-            var response = Serialization.Deserialize<TResponse>(Data);
-            if (response == null) response = new TResponse();
+            var response = GetRequest<TResponse>();
+            response ??= new TResponse();
             switch (ErrorCode)
             {
                 case RequestError.NONE:
@@ -89,42 +133,42 @@ namespace InABox.IPC
 
         public static IPCRequest Query<T>(QueryRequest<T> request) where T : Entity, new()
         {
-            return new IPCRequest(Guid.NewGuid(), Method.Query, typeof(T).Name, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.Query, typeof(T).Name, request);
         }
 
         public static IPCRequest Save<T>(SaveRequest<T> request) where T : Entity, new()
         {
-            return new IPCRequest(Guid.NewGuid(), Method.Save, typeof(T).Name, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.Save, typeof(T).Name, request);
         }
 
         public static IPCRequest MultiSave<T>(MultiSaveRequest<T> request) where T : Entity, new()
         {
-            return new IPCRequest(Guid.NewGuid(), Method.MultiSave, typeof(T).Name, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.MultiSave, typeof(T).Name, request);
         }
 
         public static IPCRequest Delete<T>(DeleteRequest<T> request) where T : Entity, new()
         {
-            return new IPCRequest(Guid.NewGuid(), Method.Delete, typeof(T).Name, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.Delete, typeof(T).Name, request);
         }
 
         public static IPCRequest MultiDelete<T>(MultiDeleteRequest<T> request) where T : Entity, new()
         {
-            return new IPCRequest(Guid.NewGuid(), Method.MultiDelete, typeof(T).Name, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.MultiDelete, typeof(T).Name, request);
         }
 
         public static IPCRequest QueryMultiple(MultiQueryRequest request)
         {
-            return new IPCRequest(Guid.NewGuid(), Method.QueryMultiple, null, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.QueryMultiple, null, request);
         }
 
         public static IPCRequest Validate(ValidateRequest request)
         {
-            return new IPCRequest(Guid.NewGuid(), Method.Validate, null, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.Validate, null, request);
         }
 
         public static IPCRequest Check2FA(Check2FARequest request)
         {
-            return new IPCRequest(Guid.NewGuid(), Method.Check2FA, null, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.Check2FA, null, request);
         }
 
         public static IPCRequest Error(RequestError error)
@@ -134,12 +178,18 @@ namespace InABox.IPC
 
         public static IPCRequest Ping(PingRequest request)
         {
-            return new IPCRequest(Guid.NewGuid(), Method.Ping, null, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.Ping, null, request);
         }
         
         public static IPCRequest Info(InfoRequest request)
         {
-            return new IPCRequest(Guid.NewGuid(), Method.Info, null, Serialization.Serialize(request));
+            return CreateRequest(Guid.NewGuid(), Method.Info, null, request);
+        }
+        public static IPCRequest Notification<TNotification>(TNotification notification) where TNotification : BaseObject
+            => Notification(typeof(TNotification), notification);
+        public static IPCRequest Notification(Type TNotification, BaseObject notification)
+        {
+            return CreateRequest(Guid.NewGuid(), Method.Notification, TNotification.EntityName(), notification);
         }
     }
 }

+ 0 - 199
inabox.ipc.shared/PipeRequest.cs

@@ -1,199 +0,0 @@
-using InABox.Clients;
-using InABox.Core;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net.NetworkInformation;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace InABox.IPC.Shared
-{
-    public enum RequestError
-    {
-        NONE,
-        DISCONNECTED,
-        UNKNOWN,
-        TIMEOUT
-    }
-
-    public enum Method
-    {
-        None,
-        Query,
-        Save,
-        MultiSave,
-        Delete,
-        MultiDelete,
-        QueryMultiple,
-        Validate,
-        Check2FA,
-        Ping,
-        Info,
-        Notification
-    }
-
-    [Serializable]
-    public class PipeRequest
-    {
-        public Guid RequestID;
-        public Method Method;
-        public string? Type;
-        private string? Data;
-        private byte[]? BinaryData;
-
-        [NonSerialized]
-        public RequestError ErrorCode;
-
-        private PipeRequest(Guid requestID, Method method, string? type, string data, RequestError error = RequestError.NONE)
-        {
-            RequestID = requestID;
-            Method = method;
-            Type = type;
-            Data = data;
-            BinaryData = null;
-            ErrorCode = error;
-        }
-        private PipeRequest(Guid requestID, Method method, string? type, byte[] data, RequestError error = RequestError.NONE)
-        {
-            RequestID = requestID;
-            Method = method;
-            Type = type;
-            BinaryData = data;
-            Data = null;
-            ErrorCode = error;
-        }
-
-        public PipeRequest Respond<TResponse>(TResponse response) where TResponse : Response
-        {
-            if(response is ISerializeBinary binary)
-            {
-                return new PipeRequest(RequestID, Method.None, Type, binary.WriteBinary(BinarySerializationSettings.Latest));
-            }
-            {
-                return new PipeRequest(RequestID, Method.None, Type, Serialization.Serialize(response));
-            }
-        }
-        private static PipeRequest CreateRequest(Guid requestID, Method method, string? type, object? data)
-        {
-            if (data is ISerializeBinary binary)
-            {
-                return new PipeRequest(requestID, method, type, binary.WriteBinary(BinarySerializationSettings.Latest));
-            }
-            {
-                return new PipeRequest(requestID, method, type, Serialization.Serialize(data));
-            }
-        }
-
-        public TRequest GetRequest<TRequest>()
-        {
-            if (BinaryData is not null)
-            {
-                return (TRequest)Serialization.ReadBinary(typeof(TRequest), BinaryData, BinarySerializationSettings.Latest);
-            }
-            else
-            {
-                return Serialization.Deserialize<TRequest>(Data);
-            }
-        }
-        public object? GetRequest(Type TRequest)
-        {
-            if (BinaryData is not null)
-            {
-                return Serialization.ReadBinary(TRequest, BinaryData, BinarySerializationSettings.Latest);
-            }
-            else
-            {
-                return Serialization.Deserialize(TRequest, Data);
-            }
-        }
-
-        public TResponse GetResponse<TResponse>() where TResponse : Response, new()
-        {
-            var start = DateTime.Now;
-            var response = GetRequest<TResponse>();
-
-            response ??= new TResponse();
-            switch (ErrorCode)
-            {
-                case RequestError.NONE:
-                    break;
-                case RequestError.DISCONNECTED:
-                    response.Status = StatusCode.Error;
-                    response.Messages.Add("Server disconnected");
-                    break;
-                case RequestError.UNKNOWN:
-                    response.Status = StatusCode.Error;
-                    response.Messages.Add("Unknown Error");
-                    break;
-                case RequestError.TIMEOUT:
-                    response.Status = StatusCode.Error;
-                    response.Messages.Add("Timeout");
-                    break;
-            }
-            return response;
-        }
-
-        public static PipeRequest Query<T>(QueryRequest<T> request) where T : Entity, new()
-        {
-            return CreateRequest(Guid.NewGuid(), Method.Query, typeof(T).Name, request);
-        }
-
-        public static PipeRequest Save<T>(SaveRequest<T> request) where T : Entity, new()
-        {
-            return CreateRequest(Guid.NewGuid(), Method.Save, typeof(T).Name, request);
-        }
-
-        public static PipeRequest MultiSave<T>(MultiSaveRequest<T> request) where T : Entity, new()
-        {
-            return CreateRequest(Guid.NewGuid(), Method.MultiSave, typeof(T).Name, request);
-        }
-
-        public static PipeRequest Delete<T>(DeleteRequest<T> request) where T : Entity, new()
-        {
-            return CreateRequest(Guid.NewGuid(), Method.Delete, typeof(T).Name, request);
-        }
-
-        public static PipeRequest MultiDelete<T>(MultiDeleteRequest<T> request) where T : Entity, new()
-        {
-            return CreateRequest(Guid.NewGuid(), Method.MultiDelete, typeof(T).Name, request);
-        }
-
-        public static PipeRequest QueryMultiple(MultiQueryRequest request)
-        {
-            return CreateRequest(Guid.NewGuid(), Method.QueryMultiple, null, request);
-        }
-
-        public static PipeRequest Validate(ValidateRequest request)
-        {
-            return CreateRequest(Guid.NewGuid(), Method.Validate, null, request);
-        }
-
-        public static PipeRequest Check2FA(Check2FARequest request)
-        {
-            return CreateRequest(Guid.NewGuid(), Method.Check2FA, null, request);
-        }
-
-        public static PipeRequest Error(RequestError error)
-        {
-            return new PipeRequest(Guid.NewGuid(), Method.None, null, "", error);
-        }
-
-        public static PipeRequest Ping(PingRequest request)
-        {
-            return CreateRequest(Guid.NewGuid(), Method.Ping, null, request);
-        }
-        
-        public static PipeRequest Info(InfoRequest request)
-        {
-            return CreateRequest(Guid.NewGuid(), Method.Info, null, request);
-        }
-
-        public static PipeRequest Notification<TNotification>(TNotification notification) where TNotification : BaseObject
-            => Notification(typeof(TNotification), notification);
-        public static PipeRequest Notification(Type TNotification, BaseObject notification)
-        {
-            return CreateRequest(Guid.NewGuid(), Method.Notification, TNotification.EntityName(), notification);
-        }
-    }
-}