| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | 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    }    [Serializable]    public class PipeRequest    {        public Guid RequestID;        public Method Method;        public string? Type;        public string Data;        [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;            ErrorCode = error;        }        public PipeRequest Respond<TResponse>(TResponse response) where TResponse : Response        {            return new PipeRequest(RequestID, Method.None, Type, Serialization.Serialize(response));        }        public TRequest GetRequest<TRequest>()        {            return Serialization.Deserialize<TRequest>(Data);        }        public TResponse GetResponse<TResponse>() where TResponse : Response, new()        {            var start = DateTime.Now;            var response = Serialization.Deserialize<TResponse>(Data);            if (response == null) 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 new PipeRequest(Guid.NewGuid(), Method.Query, typeof(T).Name, Serialization.Serialize(request));        }        public static PipeRequest Save<T>(SaveRequest<T> request) where T : Entity, new()        {            return new PipeRequest(Guid.NewGuid(), Method.Save, typeof(T).Name, Serialization.Serialize(request));        }        public static PipeRequest MultiSave<T>(MultiSaveRequest<T> request) where T : Entity, new()        {            return new PipeRequest(Guid.NewGuid(), Method.MultiSave, typeof(T).Name, Serialization.Serialize(request));        }        public static PipeRequest Delete<T>(DeleteRequest<T> request) where T : Entity, new()        {            return new PipeRequest(Guid.NewGuid(), Method.Delete, typeof(T).Name, Serialization.Serialize(request));        }        public static PipeRequest MultiDelete<T>(MultiDeleteRequest<T> request) where T : Entity, new()        {            return new PipeRequest(Guid.NewGuid(), Method.MultiDelete, typeof(T).Name, Serialization.Serialize(request));        }        public static PipeRequest QueryMultiple(MultiQueryRequest request)        {            return new PipeRequest(Guid.NewGuid(), Method.QueryMultiple, null, Serialization.Serialize(request));        }        public static PipeRequest Validate(ValidateRequest request)        {            return new PipeRequest(Guid.NewGuid(), Method.Validate, null, Serialization.Serialize(request));        }        public static PipeRequest Check2FA(Check2FARequest request)        {            return new PipeRequest(Guid.NewGuid(), Method.Check2FA, null, Serialization.Serialize(request));        }        public static PipeRequest Error(RequestError error)        {            return new PipeRequest(Guid.NewGuid(), Method.None, null, "", error);        }        public static PipeRequest Ping(PingRequest request)        {            return new PipeRequest(Guid.NewGuid(), Method.Ping, null, Serialization.Serialize(request));        }                public static PipeRequest Info(InfoRequest request)        {            return new PipeRequest(Guid.NewGuid(), Method.Info, null, Serialization.Serialize(request));        }    }}
 |