| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | 
							- 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
 
- {
 
-     public enum RequestError
 
-     {
 
-         NONE,
 
-         DISCONNECTED,
 
-         UNKNOWN,
 
-         TIMEOUT
 
-     }
 
-     public enum Method
 
-     {
 
-         None,
 
-         Query,
 
-         Save,
 
-         MultiSave,
 
-         Delete,
 
-         MultiDelete,
 
-         QueryMultiple,
 
-         Validate,
 
-         Check2FA,
 
-         Ping,
 
-         Info,
 
-         Push,
 
-         Version,
 
-         ReleaseNotes,
 
-         Installer
 
-     }
 
-     [Serializable]
 
-     public class IPCMessage
 
-     {
 
-         public Guid RequestID;
 
-         public Method Method;
 
-         public string? Type;
 
-         private string? Data;
 
-         private byte[]? BinaryData;
 
-         [NonSerialized]
 
-         public RequestError ErrorCode;
 
-         private IPCMessage(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 IPCMessage(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 IPCMessage Respond<TResponse>(TResponse response) where TResponse : Response
 
-         {
 
-             return CreateRequest(RequestID, Method.None, Type, response);
 
-         }
 
-         private static IPCMessage CreateRequest(Guid requestID, Method method, string? type, object? data)
 
-         {
 
-             if (data is ISerializeBinary binary)
 
-             {
 
-                 return new IPCMessage(requestID, method, type, binary.WriteBinary(BinarySerializationSettings.Latest));
 
-             }
 
-             {
 
-                 return new IPCMessage(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 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 = 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 IPCMessage Query<T>(QueryRequest<T> request) where T : Entity, new()
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Query, typeof(T).Name, request);
 
-         }
 
-         public static IPCMessage Save<T>(SaveRequest<T> request) where T : Entity, new()
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Save, typeof(T).Name, request);
 
-         }
 
-         public static IPCMessage MultiSave<T>(MultiSaveRequest<T> request) where T : Entity, new()
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.MultiSave, typeof(T).Name, request);
 
-         }
 
-         public static IPCMessage Delete<T>(DeleteRequest<T> request) where T : Entity, new()
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Delete, typeof(T).Name, request);
 
-         }
 
-         public static IPCMessage MultiDelete<T>(MultiDeleteRequest<T> request) where T : Entity, new()
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.MultiDelete, typeof(T).Name, request);
 
-         }
 
-         public static IPCMessage QueryMultiple(MultiQueryRequest request)
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.QueryMultiple, null, request);
 
-         }
 
-         public static IPCMessage Validate(ValidateRequest request)
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Validate, null, request);
 
-         }
 
-         public static IPCMessage Check2FA(Check2FARequest request)
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Check2FA, null, request);
 
-         }
 
-         public static IPCMessage Error(RequestError error)
 
-         {
 
-             return new IPCMessage(Guid.NewGuid(), Method.None, null, "", error);
 
-         }
 
-         public static IPCMessage Ping(PingRequest request)
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Ping, null, request);
 
-         }
 
-         
 
-         public static IPCMessage Info(InfoRequest request)
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Info, null, request);
 
-         }
 
-         public static IPCMessage Version(VersionRequest request)
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Version, null, request);
 
-         }
 
-         public static IPCMessage ReleaseNotes(ReleaseNotesRequest request)
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.ReleaseNotes, null, request);
 
-         }
 
-         public static IPCMessage Installer(InstallerRequest request)
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Installer, null, request);
 
-         }
 
-         public static IPCMessage Push<TPush>(TPush push) where TPush : BaseObject
 
-             => Push(typeof(TPush), push);
 
-         public static IPCMessage Push(Type TPush, BaseObject push)
 
-         {
 
-             return CreateRequest(Guid.NewGuid(), Method.Push, TPush.EntityName(), push);
 
-         }
 
-     }
 
- }
 
 
  |