PipeRequest.cs 4.6 KB

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