PipeRequest.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using InABox.Clients;
  2. using InABox.Core;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Net.NetworkInformation;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace InABox.IPC.Shared
  10. {
  11. public enum RequestError
  12. {
  13. NONE,
  14. DISCONNECTED,
  15. UNKNOWN
  16. }
  17. public enum Method
  18. {
  19. None,
  20. Query,
  21. Save,
  22. MultiSave,
  23. Delete,
  24. MultiDelete,
  25. QueryMultiple,
  26. Validate,
  27. Check2FA,
  28. Ping,
  29. Info
  30. }
  31. [Serializable]
  32. public class PipeRequest
  33. {
  34. public Guid RequestID;
  35. public Method Method;
  36. public string? Type;
  37. public string Data;
  38. [NonSerialized]
  39. public RequestError ErrorCode;
  40. private PipeRequest(Guid requestID, Method method, string? type, string data, RequestError error = RequestError.NONE)
  41. {
  42. RequestID = requestID;
  43. Method = method;
  44. Type = type;
  45. Data = data;
  46. ErrorCode = error;
  47. }
  48. public PipeRequest Respond<TResponse>(TResponse response) where TResponse : Response
  49. {
  50. return new PipeRequest(RequestID, Method.None, Type, Serialization.Serialize(response));
  51. }
  52. public TRequest GetRequest<TRequest>()
  53. {
  54. return Serialization.Deserialize<TRequest>(Data);
  55. }
  56. public TResponse GetResponse<TResponse>() where TResponse : Response, new()
  57. {
  58. var start = DateTime.Now;
  59. var response = Serialization.Deserialize<TResponse>(Data);
  60. if (response == null) response = new TResponse();
  61. switch (ErrorCode)
  62. {
  63. case RequestError.NONE:
  64. break;
  65. case RequestError.DISCONNECTED:
  66. response.Status = StatusCode.Error;
  67. response.Messages.Add("Server disconnected");
  68. break;
  69. case RequestError.UNKNOWN:
  70. response.Status = StatusCode.Error;
  71. response.Messages.Add("Unknown Error");
  72. break;
  73. }
  74. return response;
  75. }
  76. public static PipeRequest Query<T>(QueryRequest<T> request) where T : Entity, new()
  77. {
  78. return new PipeRequest(Guid.NewGuid(), Method.Query, typeof(T).Name, Serialization.Serialize(request));
  79. }
  80. public static PipeRequest Save<T>(SaveRequest<T> request) where T : Entity, new()
  81. {
  82. return new PipeRequest(Guid.NewGuid(), Method.Save, typeof(T).Name, Serialization.Serialize(request));
  83. }
  84. public static PipeRequest MultiSave<T>(MultiSaveRequest<T> request) where T : Entity, new()
  85. {
  86. return new PipeRequest(Guid.NewGuid(), Method.MultiSave, typeof(T).Name, Serialization.Serialize(request));
  87. }
  88. public static PipeRequest Delete<T>(DeleteRequest<T> request) where T : Entity, new()
  89. {
  90. return new PipeRequest(Guid.NewGuid(), Method.Delete, typeof(T).Name, Serialization.Serialize(request));
  91. }
  92. public static PipeRequest MultiDelete<T>(MultiDeleteRequest<T> request) where T : Entity, new()
  93. {
  94. return new PipeRequest(Guid.NewGuid(), Method.MultiDelete, typeof(T).Name, Serialization.Serialize(request));
  95. }
  96. public static PipeRequest QueryMultiple(MultiQueryRequest request)
  97. {
  98. return new PipeRequest(Guid.NewGuid(), Method.QueryMultiple, null, Serialization.Serialize(request));
  99. }
  100. public static PipeRequest Validate(ValidateRequest request)
  101. {
  102. return new PipeRequest(Guid.NewGuid(), Method.Validate, null, Serialization.Serialize(request));
  103. }
  104. public static PipeRequest Check2FA(Check2FARequest request)
  105. {
  106. return new PipeRequest(Guid.NewGuid(), Method.Check2FA, null, Serialization.Serialize(request));
  107. }
  108. public static PipeRequest Error(RequestError error)
  109. {
  110. return new PipeRequest(Guid.NewGuid(), Method.None, null, "", error);
  111. }
  112. public static PipeRequest Ping(PingRequest request)
  113. {
  114. return new PipeRequest(Guid.NewGuid(), Method.Ping, null, Serialization.Serialize(request));
  115. }
  116. public static PipeRequest Info(InfoRequest request)
  117. {
  118. return new PipeRequest(Guid.NewGuid(), Method.Info, null, Serialization.Serialize(request));
  119. }
  120. }
  121. }