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

完善部分交互

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

代码差异

15 个文件 +306 -89
Modified XFEExtension.NetCore.ServerInteractive.Test/Program.cs +25 -18
@@ -1,26 +1,33 @@
1 1 using System.Text.Json;
2 2 using XFEExtension.NetCore.ServerInteractive.TServer.Models;
3 using XFEExtension.NetCore.ServerInteractive.Utilities;
3 4 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
4 5 using XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
5 using XFEExtension.NetCore.XFETransform.JsonConverter;
6 6
7 7 internal class Program
8 8 {
9 static readonly XFEClientRequester serverInteractive = new("http://localhost:8080/api", DeviceHelper.GetUniqueHardwareId(), string.Empty);
10 //static readonly TableRequester tableRequester = new()
11 //{
12 // RequestAddress = "http://localhost:8080/api",
13 // ComputerInfo = DeviceHelper.GetUniqueHardwareId()!,
14 // Session = string.Empty
15 //};
9 static readonly XFEClientRequester xFEClientRequester = XFEClientRequesterBuilder.CreateBuilder()
10 .UseXFEStandardRequest()
11 .Build("http://localhost:8080/", string.Empty, DeviceHelper.GetUniqueHardwareId());
12 static readonly TableRequester tableRequester = new();
16 13
17 14 [SMTest("Admin", "123456")]
18 15 public static async Task Login(string account, string password)
19 16 {
20 var session = await serverInteractive.Login(account, password);
21 Console.WriteLine(session);
22 QueryableJsonNode jsonNode = session;
23 serverInteractive.TableRequester.Session = jsonNode["session"];
17 var result = await xFEClientRequester.Request<(string session, DateTime expireDate)>("login", account, password);
18 if (result.StatusCode == System.Net.HttpStatusCode.OK)
19 {
20 Console.WriteLine(result.Result.session);
21 Console.WriteLine(result.Result.expireDate);
22 tableRequester.RequestAddress = xFEClientRequester.RequestAddress;
23 tableRequester.Session = result.Result.session;
24 tableRequester.ComputerInfo = xFEClientRequester.ComputerInfo;
25 }
26 else
27 {
28 Console.WriteLine(result.StatusCode);
29 Console.WriteLine(result.Message);
30 }
24 31 }
25 32
26 33 //[SMTest]
@@ -35,7 +42,7 @@ internal class Program
35 42 }
36 43
37 44 [SMTest]
38 public static async Task<bool> AddOrder() => await serverInteractive.TableRequester.Add<Order>(new()
45 public static async Task<bool> AddOrder() => await tableRequester.Add<Order>(new()
39 46 {
40 47 Description = "测试订单的描述",
41 48 Name = "测试订单"
@@ -44,7 +51,7 @@ internal class Program
44 51 [SMTest]
45 52 public static async Task GetOrder()
46 53 {
47 var result = await serverInteractive.TableRequester.Get<Order>();
54 var result = await tableRequester.Get<Order>();
48 55 foreach (var order in result.DataList)
49 56 {
50 57 Console.WriteLine($"ID:{order.ID}\tName:{order.Name}\tDS:{order.Description}");
@@ -54,18 +61,18 @@ internal class Program
54 61 //[SMTest]
55 62 public static async Task ChangeOrder()
56 63 {
57 var result = await serverInteractive.TableRequester.Get<Order>();
64 var result = await tableRequester.Get<Order>();
58 65 var order = result.DataList[0];
59 66 Console.WriteLine($"ID:{order.ID}\tName:{order.Name}\tDS:{order.Description}");
60 67 order.Description = "这是一条修改后的测试订单";
61 68 order.Name = "Test001";
62 await serverInteractive.TableRequester.Change(order);
69 await tableRequester.Change(order);
63 70 }
64 71
65 [SMTest]
72 //[SMTest]
66 73 public static async Task GetOrder2()
67 74 {
68 var result = await serverInteractive.TableRequester.Get<Order>();
75 var result = await tableRequester.Get<Order>();
69 76 foreach (var order in result.DataList)
70 77 {
71 78 Console.WriteLine($"ID:{order.ID}\tName:{order.Name}\tDS:{order.Description}");
Modified XFEExtension.NetCore.ServerInteractive/Implements/Requester/XFERequestServiceBase.cs +0 -4
@@ -8,10 +8,6 @@ namespace XFEExtension.NetCore.ServerInteractive.Implements.Requester;
8 8 /// </summary>
9 9 public abstract class XFERequestServiceBase : IXFERequestService
10 10 {
11 /// <inheritdoc/>
12 public Func<string> GetSession { get; set; } = () => string.Empty;
13 /// <inheritdoc/>
14 public Func<string> GetComputerInfo { get; set; } = () => string.Empty;
15 11 /// <inheritdoc/>
16 12 public XFEClientRequester XFEClientRequester { get; set; }
17 13
Added XFEExtension.NetCore.ServerInteractive/Implements/XFEBuilderBase.cs +17 -0
@@ -0,0 +1,17 @@
1 using XFEExtension.NetCore.ServerInteractive.Interfaces;
2
3 namespace XFEExtension.NetCore.ServerInteractive.Implements;
4
5 /// <summary>
6 /// 构建器基类
7 /// </summary>
8 public abstract class XFEBuilderBase : IParameterService
9 {
10 /// <inheritdoc/>
11 public Dictionary<string, object> ParameterDictionary { get; set; } = [];
12
13 IParameterService IParameterService.AddParameter(string name, object value)
14 {
15
16 }
17 }
Added XFEExtension.NetCore.ServerInteractive/Interfaces/IParameterService.cs +62 -0
@@ -0,0 +1,62 @@
1 namespace XFEExtension.NetCore.ServerInteractive.Interfaces;
2
3 /// <summary>
4 /// 参数服务接口
5 /// </summary>
6 public interface IParameterService
7 {
8 /// <summary>
9 /// 参数字典
10 /// </summary>
11 Dictionary<string, object> ParameterDictionary { get; set; }
12
13 /// <summary>
14 /// 添加参数列表
15 /// </summary>
16 /// <param name="name">名称</param>
17 /// <param name="value">数值</param>
18 /// <returns></returns>
19 IParameterService AddParameter(string name, object value)
20 {
21 ParameterDictionary.Add(name, value);
22 return this;
23 }
24
25 /// <summary>
26 /// 添加参数列表
27 /// </summary>
28 /// <param name="keyValuePairList"></param>
29 /// <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);
42
43 /// <summary>
44 /// 应用参数
45 /// </summary>
46 /// <param name="serviceParameterCacheDictionary"></param>
47 /// <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 }
62 }
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IXFERequestService.cs +0 -8
@@ -5,14 +5,6 @@
5 5 /// </summary>
6 6 public interface IXFERequestService : IRequestServiceBase
7 7 {
8 /// <summary>
9 /// 获取Session方法
10 /// </summary>
11 Func<string> GetSession { get; set; }
12 /// <summary>
13 /// 获取电脑信息方法
14 /// </summary>
15 Func<string> GetComputerInfo { get; set; }
16 8 /// <summary>
17 9 /// 提交请求体
18 10 /// </summary>
Modified XFEExtension.NetCore.ServerInteractive/Models/RequesterModels/ClientRequestResult.cs +2 -2
@@ -23,10 +23,10 @@ public class ClientRequestResult<T> : IRequestResult<T>
23 23 /// </summary>
24 24 /// <typeparam name="F">指定泛型</typeparam>
25 25 /// <returns></returns>
26 public ClientRequestResult<F> ConvertTo<F>() => new()
26 public ClientRequestResult<F> TryConvertTo<F>() => new()
27 27 {
28 28 Message = Message,
29 29 StatusCode = StatusCode,
30 Result = (F)(object)Result!
30 Result = Result is not null ? (F)(object)Result : default!
31 31 };
32 32 }
Added XFEExtension.NetCore.ServerInteractive/Models/RequesterModels/XFEClientInstanceRequest.cs +16 -0
@@ -0,0 +1,16 @@
1 namespace XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
2
3 /// <summary>
4 /// XFE客户端实例请求
5 /// </summary>
6 public class XFEClientInstanceRequest
7 {
8 /// <summary>
9 /// 构建请求体
10 /// </summary>
11 public Func<string, string, object[], object> ConstructBody { get; set; } = (_, _, _) => default!;
12 /// <summary>
13 /// 处理请求
14 /// </summary>
15 public Func<string, object>? ProcessResponse { get; set; }
16 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Helpers/BuilderHelper.cs +1 -22
@@ -1,29 +1,8 @@
1 using XFEExtension.NetCore.ServerInteractive.Utilities.Server;
2
3 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
1 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
4 2
5 3 /// <summary>
6 4 /// 构建器帮助类
7 5 /// </summary>
8 6 public static class BuilderHelper
9 7 {
10 /// <summary>
11 /// 应用参数
12 /// </summary>
13 /// <param name="serviceParameterCacheDictionary"></param>
14 /// <param name="service"></param>
15 public static void ApplyParameter(Dictionary<string, object> serviceParameterCacheDictionary, object service)
16 {
17 var parameterList = service.GetType().GetProperties();
18 foreach (var parameter in serviceParameterCacheDictionary)
19 {
20 foreach (var targetParameter in parameterList)
21 {
22 if (parameter.Key == targetParameter.Name)
23 {
24 targetParameter.SetValue(service, parameter.Value);
25 }
26 }
27 }
28 }
29 8 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Serviecs/LoginRequestService.cs +1 -0
@@ -21,6 +21,7 @@ public class LoginRequestService : XFERequestServiceBase
21 21 public override object PostRequest(string execute, params object[] parameters) => new
22 22 {
23 23 execute,
24 computerInfo = XFEClientRequester.ComputerInfo,
24 25 account = parameters[0],
25 26 password = parameters[1]
26 27 };
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequester.cs +22 -4
@@ -20,6 +20,7 @@ public abstract class XFEClientRequester : IRequesterBase
20 20 readonly JsonSerializerOptions jsonSerializerOptions = new();
21 21 internal Dictionary<string, IRequestService> requestServiceDictionary = [];
22 22 internal Dictionary<string, IXFERequestService> xFERequestServiceDictionary = [];
23 internal Dictionary<string, XFEClientInstanceRequest> xFEClientInstanceRequestDictionary = [];
23 24 /// <inheritdoc/>
24 25 public string RequestAddress { get; set; } = string.Empty;
25 26 /// <inheritdoc/>
@@ -45,7 +46,7 @@ public abstract class XFEClientRequester : IRequesterBase
45 46 /// <param name="parameters"></param>
46 47 /// <returns></returns>
47 48 /// <exception cref="XFERequesterException"></exception>
48 public async Task<ClientRequestResult<T>> Request<T>(string serviceName, params object[] parameters) => (await Request(serviceName, parameters)).ConvertTo<T>();
49 public async Task<ClientRequestResult<T>> Request<T>(string serviceName, params object[] parameters) => (await Request(serviceName, parameters)).TryConvertTo<T>();
49 50
50 51 /// <summary>
51 52 /// 请求
@@ -58,13 +59,13 @@ public abstract class XFEClientRequester : IRequesterBase
58 59 {
59 60 try
60 61 {
62 var result = new ClientRequestResult<object>();
61 63 if (requestServiceDictionary.TryGetValue(serviceName, out var service))
62 64 {
63 return await service.Request<object>(parameters);
65 result = await service.Request<object>(parameters);
64 66 }
65 67 else if (xFERequestServiceDictionary.TryGetValue(serviceName, out var xFEService))
66 68 {
67 var result = new ClientRequestResult<object>();
68 69 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, xFEService.PostRequest(serviceName, parameters).ToJson());
69 70 result.StatusCode = code;
70 71 if (code == HttpStatusCode.OK)
@@ -79,8 +80,25 @@ public abstract class XFEClientRequester : IRequesterBase
79 80 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
80 81 result.Message = response;
81 82 }
82 return result;
83 83 }
84 else if (xFEClientInstanceRequestDictionary.TryGetValue(serviceName, out var instance))
85 {
86 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, instance.ConstructBody(Session, ComputerInfo, parameters).ToJson());
87 result.StatusCode = code;
88 if (code == HttpStatusCode.OK)
89 {
90 var requestResult = instance.ProcessResponse?.Invoke(response);
91 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
92 result.Message = "Success";
93 result.Result = requestResult ?? new();
94 }
95 else
96 {
97 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
98 result.Message = response;
99 }
100 }
101 return result;
84 102 }
85 103 catch (Exception ex)
86 104 {
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs +52 -1
@@ -1,5 +1,6 @@
1 1 using XFEExtension.NetCore.AutoImplement;
2 2 using XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
3 using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
3 4 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
4 5
5 6 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
@@ -13,11 +14,15 @@ public abstract class XFEClientRequesterBuilder
13 14 readonly Dictionary<string, object> parameterDictionary = [];
14 15 readonly Dictionary<string, IRequestService> requestServiceDictionary = [];
15 16 readonly Dictionary<string, IXFERequestService> xFERequestServiceDictionary = [];
17 readonly Dictionary<string, XFEClientInstanceRequest> xFEClientInstanceRequestDictionary = [];
16 18 /// <summary>
17 19 /// 创建构建器
18 20 /// </summary>
19 21 /// <returns></returns>
20 public static XFEClientRequesterBuilder CreateBuilder() => new XFEClientRequesterBuilderImpl();
22 public static XFEClientRequesterBuilder CreateBuilder()
23 {
24 return new XFEClientRequesterBuilderImpl();
25 }
21 26
22 27 /// <summary>
23 28 /// 添加请求
@@ -60,4 +65,50 @@ public abstract class XFEClientRequesterBuilder
60 65 /// <param name="serviceName">请求服务名称</param>
61 66 /// <returns></returns>
62 67 public XFEClientRequesterBuilder AddXFERequest<T>(string serviceName) where T : IXFERequestService, new() => AddXFERequest(serviceName, new T());
68
69 /// <summary>
70 /// 添加实例请求
71 /// </summary>
72 /// <param name="serviceName">服务名称</param>
73 /// <param name="xFEClientInstanceRequest">请求实例</param>
74 /// <returns></returns>
75 public XFEClientRequesterBuilder AddRequest(string serviceName, XFEClientInstanceRequest xFEClientInstanceRequest)
76 {
77 xFEClientInstanceRequestDictionary.Add(serviceName, xFEClientInstanceRequest);
78 return this;
79 }
80
81 /// <summary>
82 /// 添加实例请求
83 /// </summary>
84 /// <param name="serviceName">请求服务名称</param>
85 /// <param name="constructBody">构造请求体方法<seealso cref="object"/> (<seealso cref="string"/> session, <seealso cref="string"/> session, <seealso cref="object"/>[] parameters)</param>
86 /// <param name="processResponse">处理响应方法<seealso cref="object"/> (<seealso cref="string"/> response)</param>
87 /// <returns></returns>
88 public XFEClientRequesterBuilder AddRequest(string serviceName, Func<string, string, object[], object> constructBody, Func<string, object>? processResponse = null) => AddRequest(serviceName, new XFEClientInstanceRequest()
89 {
90 ConstructBody = constructBody,
91 ProcessResponse = processResponse
92 });
93
94 /// <summary>
95 /// 构建XFE客户端请求器
96 /// </summary>
97 /// <param name="requestAddress">请求地址</param>
98 /// <param name="session">Session</param>
99 /// <param name="computerInfo">电脑信息</param>
100 /// <returns>XFE客户端请求器</returns>
101 public XFEClientRequester Build(string requestAddress = "http://localhost:8080/", string session = "", string computerInfo = "")
102 {
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;
113 }
63 114 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/CoreLogService.cs +0 -1
@@ -1,5 +1,4 @@
1 1 using System.Net;
2 using XFEExtension.NetCore.CyberComm;
3 2 using XFEExtension.NetCore.ServerInteractive.Models.ServerModels;
4 3 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
5 4 using XFEExtension.NetCore.XFETransform.JsonConverter;
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/CoreServerExceptionProcessService.cs +16 -2
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCoreBuilder.cs +4 -27
Added XFEExtension.NetCore.ServerInteractive/Utilities/XFEClientRequesterBuilderExtensions.cs +88 -0