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

完善客户端交互

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

代码差异

10 个文件 +106 -78
Modified XFEExtension.NetCore.ServerInteractive.Test/Program.cs +9 -2
@@ -6,11 +6,18 @@ using XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
6 6
7 7 internal class Program
8 8 {
9 static readonly XFEClientRequester xFEClientRequester = XFEClientRequesterBuilder.CreateBuilder()
9 static readonly XFEClientRequester xFEClientRequester = XFEClientRequesterBuilder.CreateBuilder("http://localhost:8080/", string.Empty, DeviceHelper.GetUniqueHardwareId())
10 10 .UseXFEStandardRequest()
11 .Build("http://localhost:8080/", string.Empty, DeviceHelper.GetUniqueHardwareId());
11 .Build();
12 12 static readonly TableRequester tableRequester = new();
13 13
14 static Program() => xFEClientRequester.MessageReceived += XFEClientRequester_MessageReceived;
15
16 private static void XFEClientRequester_MessageReceived(object? sender, XFEExtension.NetCore.ServerInteractive.Models.RequesterModels.ServerInteractiveEventArgs e)
17 {
18 Console.WriteLine($"请求完成:{e.StatusCode}\t{e.Message}");
19 }
20
14 21 [SMTest("Admin", "123456")]
15 22 public static async Task Login(string account, string password)
16 23 {
Modified XFEExtension.NetCore.ServerInteractive/Implements/XFEBuilderBase.cs +16 -3
@@ -5,13 +5,26 @@ namespace XFEExtension.NetCore.ServerInteractive.Implements;
5 5 /// <summary>
6 6 /// 构建器基类
7 7 /// </summary>
8 public abstract class XFEBuilderBase : IParameterService
8 public abstract class XFEBuilderBase<T> : IParameterService<T>, IParameterServiceBase where T : XFEBuilderBase<T>
9 9 {
10 10 /// <inheritdoc/>
11 11 public Dictionary<string, object> ParameterDictionary { get; set; } = [];
12 12
13 IParameterService IParameterService.AddParameter(string name, object value)
13 /// <inheritdoc/>
14 public T AddParameter(string name, object value)
14 15 {
15
16 ParameterDictionary.Add(name, value);
17 return (T)this;
16 18 }
19
20 /// <inheritdoc/>
21 public T AddParameterList(params KeyValuePair<string, object>[] keyValuePairList)
22 {
23 foreach (var keyValuePair in keyValuePairList)
24 AddParameter(keyValuePair.Key, keyValuePair.Value);
25 return (T)this;
26 }
27
28 /// <inheritdoc/>
29 public void ApplyParameter(object service) => IParameterServiceBase.ApplyParameter(ParameterDictionary, service);
17 30 }
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/IParameterService.cs +4 -37
@@ -3,12 +3,8 @@
3 3 /// <summary>
4 4 /// 参数服务接口
5 5 /// </summary>
6 public interface IParameterService
6 public interface IParameterService<T> where T : IParameterServiceBase
7 7 {
8 /// <summary>
9 /// 参数字典
10 /// </summary>
11 Dictionary<string, object> ParameterDictionary { get; set; }
12 8
13 9 /// <summary>
14 10 /// 添加参数列表
@@ -16,47 +12,18 @@ public interface IParameterService
16 12 /// <param name="name">名称</param>
17 13 /// <param name="value">数值</param>
18 14 /// <returns></returns>
19 IParameterService AddParameter(string name, object value)
20 {
21 ParameterDictionary.Add(name, value);
22 return this;
23 }
15 T AddParameter(string name, object value);
24 16
25 17 /// <summary>
26 18 /// 添加参数列表
27 19 /// </summary>
28 20 /// <param name="keyValuePairList"></param>
29 21 /// <returns></returns>
30 IParameterService AddParameterList(params KeyValuePair<string, object>[] keyValuePairList)
31 {
32 foreach (var keyValuePair in keyValuePairList)
33 ParameterDictionary.Add(keyValuePair.Key, keyValuePair.Value);
34 return this;
35 }
36
37 /// <summary>
38 /// 应用参数
39 /// </summary>
40 /// <param name="service"></param>
41 void ApplyParameter(object service) => ApplyParameter(ParameterDictionary, service);
22 T AddParameterList(params KeyValuePair<string, object>[] keyValuePairList);
42 23
43 24 /// <summary>
44 25 /// 应用参数
45 26 /// </summary>
46 /// <param name="serviceParameterCacheDictionary"></param>
47 27 /// <param name="service"></param>
48 public static void ApplyParameter(Dictionary<string, object> serviceParameterCacheDictionary, object service)
49 {
50 var parameterList = service.GetType().GetProperties();
51 foreach (var parameter in serviceParameterCacheDictionary)
52 {
53 foreach (var targetParameter in parameterList)
54 {
55 if (parameter.Key == targetParameter.Name)
56 {
57 targetParameter.SetValue(service, parameter.Value);
58 }
59 }
60 }
61 }
28 protected void ApplyParameter(object service);
62 29 }
Added XFEExtension.NetCore.ServerInteractive/Interfaces/IParameterServiceBase.cs +32 -0
@@ -0,0 +1,32 @@
1 namespace XFEExtension.NetCore.ServerInteractive.Interfaces;
2
3 /// <summary>
4 /// 参数服务接口基类
5 /// </summary>
6 public interface IParameterServiceBase
7 {
8 /// <summary>
9 /// 参数字典
10 /// </summary>
11 Dictionary<string, object> ParameterDictionary { get; set; }
12
13 /// <summary>
14 /// 应用参数
15 /// </summary>
16 /// <param name="serviceParameterCacheDictionary"></param>
17 /// <param name="service"></param>
18 public static void ApplyParameter(Dictionary<string, object> serviceParameterCacheDictionary, object service)
19 {
20 var parameterList = service.GetType().GetProperties();
21 foreach (var parameter in serviceParameterCacheDictionary)
22 {
23 foreach (var targetParameter in parameterList)
24 {
25 if (parameter.Key == targetParameter.Name)
26 {
27 targetParameter.SetValue(service, parameter.Value);
28 }
29 }
30 }
31 }
32 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Helpers/InteractiveHelper.cs +10 -0
@@ -1,4 +1,5 @@
1 1 using System.Net;
2 using System.Text.Json;
2 3
3 4 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
4 5
@@ -26,4 +27,13 @@ public static class InteractiveHelper
26 27 return (ex.Message, result.StatusCode);
27 28 }
28 29 }
30
31 /// <summary>
32 /// 获取响应
33 /// </summary>
34 /// <param name="requestAddress">请求地址</param>
35 /// <param name="postBody">请求体对象</param>
36 /// <param name="jsonSerializerOptions">序列化参数</param>
37 /// <returns></returns>
38 public static async Task<(string, HttpStatusCode)> GetServerResponse(string requestAddress, object postBody, JsonSerializerOptions jsonSerializerOptions) => await GetServerResponse(requestAddress, JsonSerializer.Serialize(postBody, jsonSerializerOptions));
29 39 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Serviecs/LoginRequestService.cs +2 -2
@@ -12,9 +12,9 @@ public class LoginRequestService : XFERequestServiceBase
12 12 public override object AnalyzeResponse(string response)
13 13 {
14 14 QueryableJsonNode jsonNode = response;
15 var session = jsonNode["session"];
15 string session = jsonNode["session"];
16 16 XFEClientRequester.Session = session;
17 return (session, jsonNode["expireDate"]);
17 return (session, DateTime.Parse(jsonNode["expireDate"]));
18 18 }
19 19
20 20 /// <inheritdoc/>
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequester.cs +2 -2
@@ -66,7 +66,7 @@ public abstract class XFEClientRequester : IRequesterBase
66 66 }
67 67 else if (xFERequestServiceDictionary.TryGetValue(serviceName, out var xFEService))
68 68 {
69 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, xFEService.PostRequest(serviceName, parameters).ToJson());
69 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, xFEService.PostRequest(serviceName, parameters), jsonSerializerOptions);
70 70 result.StatusCode = code;
71 71 if (code == HttpStatusCode.OK)
72 72 {
@@ -83,7 +83,7 @@ public abstract class XFEClientRequester : IRequesterBase
83 83 }
84 84 else if (xFEClientInstanceRequestDictionary.TryGetValue(serviceName, out var instance))
85 85 {
86 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, instance.ConstructBody(Session, ComputerInfo, parameters).ToJson());
86 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, instance.ConstructBody(Session, ComputerInfo, parameters), jsonSerializerOptions);
87 87 result.StatusCode = code;
88 88 if (code == HttpStatusCode.OK)
89 89 {
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs +20 -20
@@ -1,7 +1,7 @@
1 1 using XFEExtension.NetCore.AutoImplement;
2 using XFEExtension.NetCore.ServerInteractive.Implements;
2 3 using XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
3 4 using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
4 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
5 5
6 6 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
7 7
@@ -9,8 +9,9 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
9 9 /// XFE客户端请求器构建器
10 10 /// </summary>
11 11 [CreateImpl]
12 public abstract class XFEClientRequesterBuilder
12 public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientRequesterBuilder>
13 13 {
14 readonly XFEClientRequester xFEClientRequester = new XFEClientRequesterImpl();
14 15 readonly Dictionary<string, object> parameterDictionary = [];
15 16 readonly Dictionary<string, IRequestService> requestServiceDictionary = [];
16 17 readonly Dictionary<string, IXFERequestService> xFERequestServiceDictionary = [];
@@ -18,10 +19,18 @@ public abstract class XFEClientRequesterBuilder
18 19 /// <summary>
19 20 /// 创建构建器
20 21 /// </summary>
22 /// <param name="requestAddress">请求地址</param>
23 /// <param name="session">Session</param>
24 /// <param name="computerInfo">电脑信息</param>
21 25 /// <returns></returns>
22 public static XFEClientRequesterBuilder CreateBuilder()
26 public static XFEClientRequesterBuilder CreateBuilder(string requestAddress = "http://localhost:8080/", string session = "", string computerInfo = "")
23 27 {
24 return new XFEClientRequesterBuilderImpl();
28 var builder = new XFEClientRequesterBuilderImpl();
29 builder.xFEClientRequester.RequestAddress = requestAddress;
30 builder.xFEClientRequester.Session = session;
31 builder.xFEClientRequester.ComputerInfo = computerInfo;
32 builder.AddParameter("XFEClientRequester", builder.xFEClientRequester);
33 return builder;
25 34 }
26 35
27 36 /// <summary>
@@ -32,7 +41,7 @@ public abstract class XFEClientRequesterBuilder
32 41 /// <returns></returns>
33 42 public XFEClientRequesterBuilder AddRequest(string serviceName, IRequestService requestService)
34 43 {
35 BuilderHelper.ApplyParameter(parameterDictionary, requestService);
44 ApplyParameter(requestService);
36 45 requestServiceDictionary.Add(serviceName, requestService);
37 46 return this;
38 47 }
@@ -53,7 +62,7 @@ public abstract class XFEClientRequesterBuilder
53 62 /// <returns></returns>
54 63 public XFEClientRequesterBuilder AddXFERequest(string serviceName, IXFERequestService xFERequestService)
55 64 {
56 BuilderHelper.ApplyParameter(parameterDictionary, xFERequestService);
65 ApplyParameter(xFERequestService);
57 66 xFERequestServiceDictionary.Add(serviceName, xFERequestService);
58 67 return this;
59 68 }
@@ -94,21 +103,12 @@ public abstract class XFEClientRequesterBuilder
94 103 /// <summary>
95 104 /// 构建XFE客户端请求器
96 105 /// </summary>
97 /// <param name="requestAddress">请求地址</param>
98 /// <param name="session">Session</param>
99 /// <param name="computerInfo">电脑信息</param>
100 106 /// <returns>XFE客户端请求器</returns>
101 public XFEClientRequester Build(string requestAddress = "http://localhost:8080/", string session = "", string computerInfo = "")
107 public XFEClientRequester Build()
102 108 {
103 var requester = new XFEClientRequesterImpl
104 {
105 RequestAddress = requestAddress,
106 Session = session,
107 ComputerInfo = computerInfo,
108 requestServiceDictionary = requestServiceDictionary,
109 xFERequestServiceDictionary = xFERequestServiceDictionary,
110 xFEClientInstanceRequestDictionary = xFEClientInstanceRequestDictionary
111 };
112 return requester;
109 xFEClientRequester.requestServiceDictionary = requestServiceDictionary;
110 xFEClientRequester.xFERequestServiceDictionary = xFERequestServiceDictionary;
111 xFEClientRequester.xFEClientInstanceRequestDictionary = xFEClientInstanceRequestDictionary;
112 return xFEClientRequester;
113 113 }
114 114 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerBuilder.cs +2 -1
@@ -1,5 +1,6 @@
1 1 using XFEExtension.NetCore.AutoImplement;
2 2 using XFEExtension.NetCore.ServerInteractive.Exceptions;
3 using XFEExtension.NetCore.ServerInteractive.Implements;
3 4 using XFEExtension.NetCore.ServerInteractive.Interfaces.ServerService;
4 5
5 6 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Server;
@@ -8,7 +9,7 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Server;
8 9 /// XFE服务器构建器
9 10 /// </summary>
10 11 [CreateImpl]
11 public abstract class XFEServerBuilder
12 public abstract class XFEServerBuilder : XFEBuilderBase<XFEServerBuilder>
12 13 {
13 14 bool addedProcessServiced = false;
14 15 ICoreServerProcessService? coreServerProcess;
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCoreBuilder.cs +9 -11
@@ -1,7 +1,6 @@
1 1 using XFEExtension.NetCore.AutoImplement;
2 using XFEExtension.NetCore.ServerInteractive.Interfaces;
2 using XFEExtension.NetCore.ServerInteractive.Implements;
3 3 using XFEExtension.NetCore.ServerInteractive.Interfaces.CoreService;
4 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
5 4 using XFEExtension.NetCore.StringExtension;
6 5
7 6 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Server;
@@ -10,7 +9,7 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Server;
10 9 /// XFE服务器核心构建器
11 10 /// </summary>
12 11 [CreateImpl]
13 public abstract class XFEServerCoreBuilder : IParameterService
12 public abstract class XFEServerCoreBuilder : XFEBuilderBase<XFEServerCoreBuilder>
14 13 {
15 14 readonly XFEServerCore xFEServerCore = new XFEServerCoreImpl();
16 15 readonly List<IServerCoreRegisterService> serverCoreServiceList = [];
@@ -20,7 +19,6 @@ public abstract class XFEServerCoreBuilder : IParameterService
20 19 readonly Dictionary<string, IServerCoreStandardRegisterAsyncService> serverStandardCoreAsyncServiceDictionary = [];
21 20 readonly Dictionary<List<string>, IServerCoreStandardRegisterService> serverMultiStandardCoreServiceDictionary = [];
22 21 readonly Dictionary<List<string>, IServerCoreStandardRegisterAsyncService> serverMultiStandardCoreAsyncServiceDictionary = [];
23 public Dictionary<string, object> ParameterDictionary { get; set; } = [];
24 22
25 23 /// <summary>
26 24 /// 创建XFE服务器核心构建器
@@ -40,7 +38,7 @@ public abstract class XFEServerCoreBuilder : IParameterService
40 38 /// <returns>XFE服务器核心构建器</returns>
41 39 public XFEServerCoreBuilder AddService(IServerCoreRegisterService serverCoreRegisterService)
42 40 {
43 BuilderHelper.ApplyParameter(serviceParameterCacheDictionary, serverCoreRegisterService);
41 ApplyParameter(serverCoreRegisterService);
44 42 serverCoreServiceList.Add(serverCoreRegisterService);
45 43 return this;
46 44 }
@@ -59,7 +57,7 @@ public abstract class XFEServerCoreBuilder : IParameterService
59 57 /// <returns>XFE服务器核心构建器</returns>
60 58 public XFEServerCoreBuilder AddVerifyService(IServerCoreVerifyService serverCoreVerifyService)
61 59 {
62 BuilderHelper.ApplyParameter(serviceParameterCacheDictionary, serverCoreVerifyService);
60 ApplyParameter(serverCoreVerifyService);
63 61 serverCoreVerifyServiceList.Add(serverCoreVerifyService);
64 62 return this;
65 63 }
@@ -78,7 +76,7 @@ public abstract class XFEServerCoreBuilder : IParameterService
78 76 /// <returns>XFE服务器核心构建器</returns>
79 77 public XFEServerCoreBuilder AddVerifyAsyncService(IServerCoreVerifyAsyncService serverCoreVerifyAsyncService)
80 78 {
81 BuilderHelper.ApplyParameter(serviceParameterCacheDictionary, serverCoreVerifyAsyncService);
79 ApplyParameter(serverCoreVerifyAsyncService);
82 80 serverCoreVerifyAsyncServiceList.Add(serverCoreVerifyAsyncService);
83 81 return this;
84 82 }
@@ -98,7 +96,7 @@ public abstract class XFEServerCoreBuilder : IParameterService
98 96 /// <returns>XFE服务器核心构建器</returns>
99 97 public XFEServerCoreBuilder RegisterStandardService(string execute, IServerCoreStandardRegisterService serverCoreStandardRegisterService)
100 98 {
101 BuilderHelper.ApplyParameter(serviceParameterCacheDictionary, serverCoreStandardRegisterService);
99 ApplyParameter(serverCoreStandardRegisterService);
102 100 serverStandardCoreServiceDictionary.Add(execute, serverCoreStandardRegisterService);
103 101 return this;
104 102 }
@@ -119,7 +117,7 @@ public abstract class XFEServerCoreBuilder : IParameterService
119 117 /// <returns>XFE服务器核心构建器</returns>
120 118 public XFEServerCoreBuilder RegisterStandardAsyncService(string execute, IServerCoreStandardRegisterAsyncService serverCoreStandardAsyncRegisterService)
121 119 {
122 BuilderHelper.ApplyParameter(serviceParameterCacheDictionary, serverCoreStandardAsyncRegisterService);
120 ApplyParameter(serverCoreStandardAsyncRegisterService);
123 121 serverStandardCoreAsyncServiceDictionary.Add(execute, serverCoreStandardAsyncRegisterService);
124 122 return this;
125 123 }
@@ -140,7 +138,7 @@ public abstract class XFEServerCoreBuilder : IParameterService
140 138 /// <returns>XFE服务器核心构建器</returns>
141 139 public XFEServerCoreBuilder RegisterStandardService(List<string> executeList, IServerCoreStandardRegisterService serverCoreStandardRegisterService)
142 140 {
143 BuilderHelper.ApplyParameter(serviceParameterCacheDictionary, serverCoreStandardRegisterService);
141 ApplyParameter(serverCoreStandardRegisterService);
144 142 serverMultiStandardCoreServiceDictionary.Add(executeList, serverCoreStandardRegisterService);
145 143 return this;
146 144 }
@@ -161,7 +159,7 @@ public abstract class XFEServerCoreBuilder : IParameterService
161 159 /// <returns>XFE服务器核心构建器</returns>
162 160 public XFEServerCoreBuilder RegisterStandardAsyncService(List<string> executeList, IServerCoreStandardRegisterAsyncService serverCoreStandardRegisterAsyncService)
163 161 {
164 BuilderHelper.ApplyParameter(serviceParameterCacheDictionary, serverCoreStandardRegisterAsyncService);
162 ApplyParameter(serverCoreStandardRegisterAsyncService);
165 163 serverMultiStandardCoreAsyncServiceDictionary.Add(executeList, serverCoreStandardRegisterAsyncService);
166 164 return this;
167 165 }