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
+9
-2
Modified
XFEExtension.NetCore.ServerInteractive/Implements/XFEBuilderBase.cs
+16
-3
Modified
XFEExtension.NetCore.ServerInteractive/Interfaces/IParameterService.cs
+4
-37
Added
XFEExtension.NetCore.ServerInteractive/Interfaces/IParameterServiceBase.cs
+32
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Helpers/InteractiveHelper.cs
+10
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Serviecs/LoginRequestService.cs
+2
-2
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequester.cs
+2
-2
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs
+20
-20
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerBuilder.cs
+2
-1
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCoreBuilder.cs
+9
-11
XFEstudio/XFEExtension.NetCore.ServerInteractive
完善客户端交互
abb4366
代码差异
10 个文件
+106
-78
@@ -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
{
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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/>
@@ -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
{
@@ -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
}
@@ -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;
@@ -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
}