XFEExtension.NetCore.ServerInteractive
[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig
关注
0
Fork
0
Star
0
返回提交历史
Modified
XFEExtension.NetCore.ServerInteractive.Test/Program.cs
+25
-18
Modified
XFEExtension.NetCore.ServerInteractive/Implements/Requester/XFERequestServiceBase.cs
+0
-4
Added
XFEExtension.NetCore.ServerInteractive/Implements/XFEBuilderBase.cs
+17
-0
Added
XFEExtension.NetCore.ServerInteractive/Interfaces/IParameterService.cs
+62
-0
Modified
XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IXFERequestService.cs
+0
-8
Modified
XFEExtension.NetCore.ServerInteractive/Models/RequesterModels/ClientRequestResult.cs
+2
-2
Added
XFEExtension.NetCore.ServerInteractive/Models/RequesterModels/XFEClientInstanceRequest.cs
+16
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Helpers/BuilderHelper.cs
+1
-22
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Serviecs/LoginRequestService.cs
+1
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequester.cs
+22
-4
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs
+52
-1
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/CoreLogService.cs
+0
-1
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
XFEstudio/XFEExtension.NetCore.ServerInteractive
完善部分交互
e94d7b0
代码差异
15 个文件
+306
-89
@@ -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}");
@@ -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
@@ -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
}
@@ -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
}
@@ -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>
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
};
@@ -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
{
@@ -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
}
@@ -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;