XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.ServerInteractive

[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.ServerInteractive

添加部分请求器功能

5cf0fe4
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

10 个文件 +198 -25
Added XFEExtension.NetCore.ServerInteractive/Implements/Requester/XFERequestServiceBase.cs +22 -0
@@ -0,0 +1,22 @@
1 using XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
2 using XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
3
4 namespace XFEExtension.NetCore.ServerInteractive.Implements.Requester;
5
6 /// <summary>
7 /// XFE请求服务基类
8 /// </summary>
9 public abstract class XFERequestServiceBase : IXFERequestService
10 {
11 /// <inheritdoc/>
12 public Func<string> GetSession { get; set; } = () => string.Empty;
13 /// <inheritdoc/>
14 public Func<string> GetComputerInfo { get; set; } = () => string.Empty;
15 /// <inheritdoc/>
16 public XFEClientRequester XFEClientRequester { get; set; }
17
18 /// <inheritdoc/>
19 public abstract object AnalyzeResponse(string response);
20 /// <inheritdoc/>
21 public abstract object PostRequest(string execute, params object[] parameters);
22 }
Added XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IRequestResult.cs +13 -0
@@ -0,0 +1,13 @@
1 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
2
3 /// <summary>
4 /// 请求结果接口
5 /// </summary>
6 /// <typeparam name="T"></typeparam>
7 public interface IRequestResult<T> : IRequestResultBase
8 {
9 /// <summary>
10 /// 结果
11 /// </summary>
12 new T Result { get; set; }
13 }
Added XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IRequestResultBase.cs +22 -0
@@ -0,0 +1,22 @@
1 using System.Net;
2
3 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
4
5 /// <summary>
6 /// 请求结果基接口
7 /// </summary>
8 public interface IRequestResultBase
9 {
10 /// <summary>
11 /// 状态码
12 /// </summary>
13 HttpStatusCode StatusCode { get; set; }
14 /// <summary>
15 /// 消息
16 /// </summary>
17 string Message { get; set; }
18 /// <summary>
19 /// 结果
20 /// </summary>
21 object? Result { get; set; }
22 }
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IRequestService.cs +5 -2
@@ -1,4 +1,6 @@
1 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
1 using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
2
3 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
2 4
3 5 /// <summary>
4 6 /// 请求服务
@@ -8,7 +10,8 @@ public interface IRequestService : IRequestServiceBase
8 10 /// <summary>
9 11 /// 请求
10 12 /// </summary>
13 /// <typeparam name="T">请求结果泛型</typeparam>
11 14 /// <param name="parameters"></param>
12 15 /// <returns></returns>
13 Task<T> Request<T>(params object[] parameters);
16 Task<ClientRequestResult<T>> Request<T>(params object[] parameters);
14 17 }
Added XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IRequesterBase.cs +27 -0
@@ -0,0 +1,27 @@
1 using XFEExtension.NetCore.DelegateExtension;
2 using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
3
4 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
5
6 /// <summary>
7 /// 请求器基接口
8 /// </summary>
9 public interface IRequesterBase
10 {
11 /// <summary>
12 /// 请求地址
13 /// </summary>
14 string RequestAddress { get; set; }
15 /// <summary>
16 /// 本次会话Session
17 /// </summary>
18 string Session { get; set; }
19 /// <summary>
20 /// 电脑信息
21 /// </summary>
22 string ComputerInfo { get; set; }
23 /// <summary>
24 /// 请求消息返回事件
25 /// </summary>
26 public event XFEEventHandler<object?, ServerInteractiveEventArgs>? MessageReceived;
27 }
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IXFERequestService.cs +3 -3
@@ -16,14 +16,14 @@ public interface IXFERequestService : IRequestServiceBase
16 16 /// <summary>
17 17 /// 提交请求体
18 18 /// </summary>
19 /// <param name="execute">执行的操作名称</param>
19 20 /// <param name="parameters"></param>
20 21 /// <returns></returns>
21 object PostRequest(params object[] parameters);
22 object PostRequest(string execute, params object[] parameters);
22 23 /// <summary>
23 24 /// 接收到返回后解析
24 25 /// </summary>
25 /// <typeparam name="T"></typeparam>
26 26 /// <param name="response"></param>
27 27 /// <returns></returns>
28 Task<T> AnalyzeResponse<T>(string response);
28 object AnalyzeResponse(string response);
29 29 }
Added XFEExtension.NetCore.ServerInteractive/Models/RequesterModels/ClientRequestResult.cs +32 -0
@@ -0,0 +1,32 @@
1 using System.Net;
2 using XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
3
4 namespace XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
5
6 /// <summary>
7 /// 客户端请求结果
8 /// </summary>
9 /// <typeparam name="T"></typeparam>
10 public class ClientRequestResult<T> : IRequestResult<T>
11 {
12 /// <inheritdoc/>
13 public T Result { get; set; }
14 /// <inheritdoc/>
15 public HttpStatusCode StatusCode { get; set; } = HttpStatusCode.OK;
16 /// <inheritdoc/>
17 public string Message { get; set; } = string.Empty;
18 /// <inheritdoc/>
19 object? IRequestResultBase.Result { get => Result; set => Result = (T)value!; }
20
21 /// <summary>
22 /// 转换为指定泛型
23 /// </summary>
24 /// <typeparam name="F">指定泛型</typeparam>
25 /// <returns></returns>
26 public ClientRequestResult<F> ConvertTo<F>() => new()
27 {
28 Message = Message,
29 StatusCode = StatusCode,
30 Result = (F)(object)Result!
31 };
32 }
Added XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Serviecs/LoginRequestService.cs +27 -0
@@ -0,0 +1,27 @@
1 using XFEExtension.NetCore.ServerInteractive.Implements.Requester;
2 using XFEExtension.NetCore.XFETransform.JsonConverter;
3
4 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester.Serviecs;
5
6 /// <summary>
7 /// 登录请求服务
8 /// </summary>
9 public class LoginRequestService : XFERequestServiceBase
10 {
11 /// <inheritdoc/>
12 public override object AnalyzeResponse(string response)
13 {
14 QueryableJsonNode jsonNode = response;
15 var session = jsonNode["session"];
16 XFEClientRequester.Session = session;
17 return (session, jsonNode["expireDate"]);
18 }
19
20 /// <inheritdoc/>
21 public override object PostRequest(string execute, params object[] parameters) => new
22 {
23 execute,
24 account = parameters[0],
25 password = parameters[1]
26 };
27 }
Added XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Serviecs/ReloginRequestService.cs +21 -0
@@ -0,0 +1,21 @@
1 using XFEExtension.NetCore.ServerInteractive.Implements.Requester;
2
3 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester.Serviecs;
4
5 /// <summary>
6 /// 登录校验请求服务
7 /// </summary>
8 public class ReloginRequestService : XFERequestServiceBase
9 {
10 /// <inheritdoc/>
11 public override object AnalyzeResponse(string response)
12 {
13 throw new NotImplementedException();
14 }
15
16 /// <inheritdoc/>
17 public override object PostRequest(string execute, params object[] parameters)
18 {
19
20 }
21 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequester.cs +26 -20
@@ -15,23 +15,19 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
15 15 /// XFE客户端请求器
16 16 /// </summary>
17 17 [CreateImpl]
18 public abstract class XFEClientRequester
18 public abstract class XFEClientRequester : IRequesterBase
19 19 {
20 20 readonly JsonSerializerOptions jsonSerializerOptions = new();
21 21 internal Dictionary<string, IRequestService> requestServiceDictionary = [];
22 22 internal Dictionary<string, IXFERequestService> xFERequestServiceDictionary = [];
23 /// <summary>
24 /// 请求地址
25 /// </summary>
23 /// <inheritdoc/>
26 24 public string RequestAddress { get; set; } = string.Empty;
27 /// <summary>
28 /// 请求消息返回事件
29 /// </summary>
25 /// <inheritdoc/>
26 public string Session { get; set; } = string.Empty;
27 /// <inheritdoc/>
28 public string ComputerInfo { get; set; } = string.Empty;
29 /// <inheritdoc/>
30 30 public event XFEEventHandler<object?, ServerInteractiveEventArgs>? MessageReceived;
31 /// <summary>
32 /// 表格请求器
33 /// </summary>
34 public TableRequester TableRequester { get; set; } = new();
35 31
36 32 /// <summary>
37 33 /// XFE客户端请求器
@@ -39,11 +35,8 @@ public abstract class XFEClientRequester
39 35 public XFEClientRequester()
40 36 {
41 37 jsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
42 TableRequester.MessageReceived += TableRequester_MessageReceived;
43 38 }
44 39
45 private void TableRequester_MessageReceived(object? sender, ServerInteractiveEventArgs e) => MessageReceived?.Invoke(sender, e);
46
47 40 /// <summary>
48 41 /// 请求
49 42 /// </summary>
@@ -52,28 +45,41 @@ public abstract class XFEClientRequester
52 45 /// <param name="parameters"></param>
53 46 /// <returns></returns>
54 47 /// <exception cref="XFERequesterException"></exception>
55 public async Task<T> Request<T>(string serviceName, params object[] parameters)
48 public async Task<ClientRequestResult<T>> Request<T>(string serviceName, params object[] parameters) => (await Request(serviceName, parameters)).ConvertTo<T>();
49
50 /// <summary>
51 /// 请求
52 /// </summary>
53 /// <param name="serviceName"></param>
54 /// <param name="parameters"></param>
55 /// <returns></returns>
56 /// <exception cref="XFERequesterException"></exception>
57 public async Task<ClientRequestResult<object>> Request(string serviceName, params object[] parameters)
56 58 {
57 59 try
58 60 {
59 61 if (requestServiceDictionary.TryGetValue(serviceName, out var service))
60 62 {
61 return await service.Request<T>(parameters);
63 return await service.Request<object>(parameters);
62 64 }
63 65 else if (xFERequestServiceDictionary.TryGetValue(serviceName, out var xFEService))
64 66 {
65 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, xFEService.PostRequest(parameters).ToJson());
67 var result = new ClientRequestResult<object>();
68 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, xFEService.PostRequest(serviceName, parameters).ToJson());
69 result.StatusCode = code;
66 70 if (code == HttpStatusCode.OK)
67 71 {
68 var result = await xFEService.AnalyzeResponse<T>(response);
72 var requestResult = xFEService.AnalyzeResponse(response);
69 73 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
70 return result;
74 result.Message = "Success";
75 result.Result = requestResult;
71 76 }
72 77 else
73 78 {
74 79 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
75 return default!;
80 result.Message = response;
76 81 }
82 return result;
77 83 }
78 84 }
79 85 catch (Exception ex)