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

优化部分代码

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

代码差异

14 个文件 +72 -70
Modified XFEExtension.NetCore.ServerInteractive.Test/Program.cs +1 -1
@@ -10,7 +10,7 @@ namespace XFEExtension.NetCore.ServerInteractive.Test;
10 10
11 11 internal class Program
12 12 {
13 private static readonly XFEClientRequester s_xFEClientRequester = XFEClientRequesterBuilder.CreateBuilder()
13 private static readonly ClientRequester s_xFEClientRequester = ClientRequesterBuilder.CreateBuilder()
14 14 .UseXFEStandardRequest<UserFaceInfo>()
15 15 .AddRequest("test", (_, _, _) => new
16 16 {
Modified XFEExtension.NetCore.ServerInteractive/Implements/Requester/StandardRequestServiceBase.cs +1 -1
@@ -26,7 +26,7 @@ public abstract class StandardRequestServiceBase : IStandardRequestService
26 26 /// <inheritdoc/>
27 27 public object[] Parameters { get; set; } = [];
28 28 /// <inheritdoc/>
29 public XFEClientRequester XFEClientRequester { get; set; }
29 public ClientRequester XFEClientRequester { get; set; }
30 30
31 31 /// <inheritdoc/>
32 32 public virtual Dictionary<string, Func<object>> RequestPoints { get; } = new();
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IRequestServiceBase.cs +1 -1
@@ -10,5 +10,5 @@ public interface IRequestServiceBase
10 10 /// <summary>
11 11 /// XFE客户端请求器
12 12 /// </summary>
13 XFEClientRequester XFEClientRequester { get; set; }
13 ClientRequester XFEClientRequester { get; set; }
14 14 }
Modified XFEExtension.NetCore.ServerInteractive/Models/ServerModels/ServerCoreReturnArgs.cs +5 -0
@@ -1,6 +1,7 @@
1 1 using System.Net;
2 2 using System.Text.Json;
3 3 using XFEExtension.NetCore.CyberComm;
4 using XFEExtension.NetCore.ServerInteractive.Utilities.Server;
4 5
5 6 namespace XFEExtension.NetCore.ServerInteractive.Models.ServerModels;
6 7
@@ -33,6 +34,10 @@ public class ServerCoreReturnArgs : Exception
33 34 /// 本次异常服务器参数
34 35 /// </summary>
35 36 public required CyberCommRequestEventArgs Args { get; set; }
37 /// <summary>
38 /// 服务器核心实例(如果需要在异常处理中访问服务器核心的相关信息或方法,可以通过此属性访问)
39 /// </summary>
40 public required XFEServerCore ServerCore { get; set; }
36 41
37 42 /// <summary>
38 43 /// Sends a reply message asynchronously using the current context.
Modified XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/XFEDataDictionaryTable.cs +3 -3
@@ -199,14 +199,14 @@ public class XFEDataDictionaryTable<TValue> : IXFEDataTable where TValue : IIdMo
199 199 r.Args.Close();
200 200 break;
201 201 default:
202 Console.WriteLine($"[ERROR] 意料之外的方法:{execute}");
203 await r.Args.ReplyAndClose($"意料之外的方法:{execute}", HttpStatusCode.BadRequest);
202 Console.WriteLine($"[ERROR] 试图查询不存在的表格:{execute}");
203 await r.Args.ReplyAndClose($"试图查询不存在的表格:{execute}", HttpStatusCode.BadRequest);
204 204 break;
205 205 }
206 206 }
207 207 catch (Exception ex)
208 208 {
209 Console.WriteLine($"[WARN]【{r.Args.ClientIP}】{ex.Message}");
209 Console.WriteLine($"[WARN]({r.ServerCore.ServerCoreName}){ex.Message}");
210 210 Console.WriteLine($"[TRACE]{ex.StackTrace}");
211 211 await r.Args.ReplyAndClose(ex.Message, statusCode);
212 212 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/XFEDataListTable.cs +3 -3
@@ -208,14 +208,14 @@ public class XFEDataListTable<T> : IXFEDataTable where T : IIdModel
208 208 r.Args.Close();
209 209 break;
210 210 default:
211 Console.WriteLine($"[ERROR] 意料之外的方法:{execute}");
212 await r.Args.ReplyAndClose($"意料之外的方法:{execute}", HttpStatusCode.BadRequest);
211 Console.WriteLine($"[ERROR] 试图查询不存在的表格:{execute}");
212 await r.Args.ReplyAndClose($"试图查询不存在的表格:{execute}", HttpStatusCode.BadRequest);
213 213 break;
214 214 }
215 215 }
216 216 catch (Exception ex)
217 217 {
218 Console.WriteLine($"[WARN]【{r.Args.ClientIP}】{ex.Message}");
218 Console.WriteLine($"[WARN]({r.ServerCore.ServerCoreName}){ex.Message}");
219 219 Console.WriteLine($"[TRACE]{ex.StackTrace}");
220 220 await r.Args.ReplyAndClose(ex.Message, statusCode);
221 221 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/XFEDataTableManager.cs +2 -2
@@ -36,8 +36,8 @@ public abstract class XFEDataTableManager
36 36 }
37 37 else
38 38 {
39 Console.WriteLine($"[ERROR]【{r.Args.ClientIP}】意料之外的表格:{split[1]}");
40 await r.Args.ReplyAndClose($"意料之外的方法:{execute}", HttpStatusCode.BadRequest);
39 Console.WriteLine($"[ERROR]({r.ServerCore.ServerCoreName})【{r.Args.ClientIP}】试图查询不存在的表格:{split[1]}");
40 await r.Args.ReplyAndClose($"试图查询不存在的表格:{execute}", HttpStatusCode.BadRequest);
41 41 }
42 42 }
43 43 }
Renamed XFEExtension.NetCore.ServerInteractive/Utilities/Extensions/ClientRequesterBuilderExtensions.cs +9 -9
@@ -8,22 +8,22 @@ using XFEExtension.NetCore.ServerInteractive.Utilities.Requester.Services;
8 8 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Extensions;
9 9
10 10 /// <summary>
11 /// XFE客户端请求器构建器扩展
11 /// 客户端请求器构建器扩展
12 12 /// </summary>
13 public static class XFEClientRequesterBuilderExtensions
13 public static class ClientRequesterBuilderExtensions
14 14 {
15 15 private static readonly JsonSerializerOptions JsonSerializerOptions = new();
16 16
17 static XFEClientRequesterBuilderExtensions() => JsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
17 static ClientRequesterBuilderExtensions() => JsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
18 18
19 19 /// <param name="xFEClientRequesterBuilder"></param>
20 extension(XFEClientRequesterBuilder xFEClientRequesterBuilder)
20 extension(ClientRequesterBuilder xFEClientRequesterBuilder)
21 21 {
22 22 /// <summary>
23 23 /// 添加连接检查请求
24 24 /// </summary>
25 25 /// <returns></returns>
26 public XFEClientRequesterBuilder AddCheckConnectRequest() => xFEClientRequesterBuilder.AddRequest("check_connect", static (_, _, _) => new
26 public ClientRequesterBuilder AddCheckConnectRequest() => xFEClientRequesterBuilder.AddRequest("check_connect", static (_, _, _) => new
27 27 {
28 28 execute = "check_connect"
29 29 }, response => DateTime.Parse(response));
@@ -32,13 +32,13 @@ public static class XFEClientRequesterBuilderExtensions
32 32 /// 添加日志请求
33 33 /// </summary>
34 34 /// <returns></returns>
35 public XFEClientRequesterBuilder AddLogRequest() => xFEClientRequesterBuilder.AddRequest<LogRequestService>();
35 public ClientRequesterBuilder AddLogRequest() => xFEClientRequesterBuilder.AddRequest<LogRequestService>();
36 36
37 37 /// <summary>
38 38 /// 添加IP封禁请求
39 39 /// </summary>
40 40 /// <returns></returns>
41 public XFEClientRequesterBuilder AddBannedIPRequest() => xFEClientRequesterBuilder.AddRequest("get_bannedIPList", static (session, deviceInfo, _) => new
41 public ClientRequesterBuilder AddBannedIPRequest() => xFEClientRequesterBuilder.AddRequest("get_bannedIPList", static (session, deviceInfo, _) => new
42 42 {
43 43 execute = "get_bannedIPList",
44 44 session,
@@ -63,14 +63,14 @@ public static class XFEClientRequesterBuilderExtensions
63 63 /// </summary>
64 64 /// <typeparam name="T">登录返回用户接口类型</typeparam>
65 65 /// <returns></returns>
66 public XFEClientRequesterBuilder AddLoginRequest<T>() where T : IUserFaceInfo => xFEClientRequesterBuilder.AddRequest<UserRequestService<T>>();
66 public ClientRequesterBuilder AddLoginRequest<T>() where T : IUserFaceInfo => xFEClientRequesterBuilder.AddRequest<UserRequestService<T>>();
67 67
68 68 /// <summary>
69 69 /// 使用XFE标准服务器服务请求
70 70 /// </summary>
71 71 /// <typeparam name="T">登录返回用户接口类型</typeparam>
72 72 /// <returns></returns>
73 public XFEClientRequesterBuilder UseXFEStandardRequest<T>() where T : IUserFaceInfo => xFEClientRequesterBuilder.AddLoginRequest<T>()
73 public ClientRequesterBuilder UseXFEStandardRequest<T>() where T : IUserFaceInfo => xFEClientRequesterBuilder.AddLoginRequest<T>()
74 74 .AddBannedIPRequest()
75 75 .AddLogRequest()
76 76 .AddCheckConnectRequest();
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Extensions/XFEServerCoreBuilderExtensions.cs +0 -27
@@ -26,8 +26,6 @@ public static class XFEServerCoreBuilderExtensions
26 26 {
27 27 xFEServerCoreBuilder.AddParameter("TableManager", xFEDataTableManagerBuilder.Build(getUserFunction, getEncryptedUserLoginModelFunction));
28 28
29 // Register the service for each table operation route
30 // XFEDataTableManagerService uses dynamic routing, so we use AddServiceWithRoute
31 29 foreach (var execute in xFEDataTableManagerBuilder.ExecuteList)
32 30 {
33 31 var parts = execute.Split('_', 2);
@@ -134,47 +132,22 @@ public static class XFEServerCoreBuilderExtensions
134 132 public XFEServerCoreBuilder UseXFEStandardServerCore<T>(XFEStandardServerCoreOptions<T>? options) where T : class
135 133 {
136 134 if (options is null) return xFEServerCoreBuilder;
137
138 // start with base builder
139 135 var builder = xFEServerCoreBuilder;
140
141 // If user-related functions are provided, add user parameters and login services
142 136 var hasUserFunctions = options.GetUserFunction is not null && options.AddUserFunction is not null && options.GetEncryptedUserLoginModelFunction is not null && options.AddEncryptedUserLoginModelFunction is not null && options.RemoveEncryptedUserLoginModelFunction is not null && options.LoginResultConvertFunction is not null;
143
144 137 if (hasUserFunctions)
145 {
146 138 builder = builder.AddUserParameterBase(options.GetUserFunction!, options.AddUserFunction!, options.GetEncryptedUserLoginModelFunction!, options.AddEncryptedUserLoginModelFunction!, options.RemoveEncryptedUserLoginModelFunction!, options.GetLoginKeepDays, options.LoginResultConvertFunction!);
147 }
148
149 // DataTableManager requires both user functions and a builder
150 139 if (options.DataTableManagerBuilder is not null && options.GetUserFunction is not null && options.GetEncryptedUserLoginModelFunction is not null)
151 {
152 140 builder = builder.AddDataTableManager(options.DataTableManagerBuilder, options.GetUserFunction, options.GetEncryptedUserLoginModelFunction);
153 }
154
155 // Common services that don't strictly require user functions
156 141 if (options.UseEntryPointVerifyService)
157 {
158 142 builder = builder.AddEntryPointVerify();
159 }
160 143 if (options.UseDailyCounterService)
161 {
162 144 builder = builder.AddDailyCounterService();
163 }
164 145 if (options.UseXFEErrorProcessService)
165 {
166 146 builder = builder.AddXFEErrorProcessService();
167 }
168 147 if (options.UseConnectService)
169 {
170 148 builder = builder.AddConnectService();
171 }
172 // Add services that depend on user functions if available
173 149 if (hasUserFunctions)
174 {
175 150 builder = builder.AddStandardLoginService<T>().AddServerLogService().AddIPBannerService();
176 }
177
178 151 return builder;
179 152 }
180 153
Renamed XFEExtension.NetCore.ServerInteractive/Utilities/Requester/ClientRequester.cs +7 -3
@@ -12,10 +12,10 @@ using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter;
12 12 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
13 13
14 14 /// <summary>
15 /// XFE客户端请求器
15 /// 客户端请求器
16 16 /// </summary>
17 17 [CreateImpl]
18 public abstract class XFEClientRequester : IRequesterBase
18 public abstract class ClientRequester : IRequesterBase
19 19 {
20 20 private readonly JsonSerializerOptions _jsonSerializerOptions = new();
21 21 internal Dictionary<string, Func<IRequestService>> RequestServiceDictionary = [];
@@ -28,13 +28,17 @@ public abstract class XFEClientRequester : IRequesterBase
28 28 public string Session { get; set; } = string.Empty;
29 29 /// <inheritdoc/>
30 30 public string DeviceInfo { get; set; } = string.Empty;
31 /// <summary>
32 /// 表格请求器(如需使用表格相关功能,请通过构建器添加WithTableRequester实例并赋值此属性)
33 /// </summary>
34 public TableRequester? TableRequester { get; set; }
31 35 /// <inheritdoc/>
32 36 public event XFEEventHandler<object?, ServerInteractiveEventArgs>? MessageReceived;
33 37
34 38 /// <summary>
35 39 /// XFE客户端请求器
36 40 /// </summary>
37 protected XFEClientRequester()
41 protected ClientRequester()
38 42 {
39 43 _jsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
40 44 }
Renamed XFEExtension.NetCore.ServerInteractive/Utilities/Requester/ClientRequesterBuilder.cs +35 -12
@@ -4,16 +4,17 @@ using XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
4 4 using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
5 5 using XFEExtension.NetCore.ServerInteractive.Options;
6 6 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
7 using XFEExtension.NetCore.StringExtension;
7 8
8 9 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
9 10
10 11 /// <summary>
11 /// XFE客户端请求器构建器
12 /// 客户端请求器构建器
12 13 /// </summary>
13 14 [CreateImpl]
14 public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientRequesterBuilder>
15 public abstract class ClientRequesterBuilder : XFEBuilderBase<ClientRequesterBuilder>
15 16 {
16 private readonly XFEClientRequester _xFEClientRequester = new XFEClientRequesterImpl();
17 private readonly ClientRequester _xFEClientRequester = new ClientRequesterImpl();
17 18 private readonly Dictionary<string, Func<IRequestService>> _requestServiceDictionary = [];
18 19 private readonly Dictionary<string, Func<IStandardRequestService>> _standardRequestServiceDictionary = [];
19 20 private readonly List<(string Pattern, Func<IStandardRequestService> Factory)> _wildcardStandardRequestServiceList = [];
@@ -22,9 +23,9 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
22 23 /// 创建构建器
23 24 /// </summary>
24 25 /// <returns></returns>
25 public static XFEClientRequesterBuilder CreateBuilder()
26 public static ClientRequesterBuilder CreateBuilder()
26 27 {
27 var builder = new XFEClientRequesterBuilderImpl();
28 var builder = new ClientRequesterBuilderImpl();
28 29 builder.AddParameter("XFEClientRequester", builder._xFEClientRequester);
29 30 return builder;
30 31 }
@@ -35,7 +36,7 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
35 36 /// <typeparam name="T">请求服务泛型</typeparam>
36 37 /// <param name="serviceName">请求名称</param>
37 38 /// <returns></returns>
38 public XFEClientRequesterBuilder AddOriginRequest<T>(string serviceName) where T : IRequestService, new()
39 public ClientRequesterBuilder AddOriginRequest<T>(string serviceName) where T : IRequestService, new()
39 40 {
40 41 _requestServiceDictionary.Add(serviceName, () =>
41 42 {
@@ -51,7 +52,7 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
51 52 /// </summary>
52 53 /// <typeparam name="T">请求服务泛型</typeparam>
53 54 /// <returns></returns>
54 public XFEClientRequesterBuilder AddRequest<T>() where T : IStandardRequestService, new()
55 public ClientRequesterBuilder AddRequest<T>() where T : IStandardRequestService, new()
55 56 {
56 57 var probeService = new T();
57 58 ApplyParameter(probeService);
@@ -78,7 +79,8 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
78 79 var inst = new T();
79 80 ApplyParameter(inst);
80 81 return inst;
81 }));
82 }
83 ));
82 84 }
83 85 else
84 86 {
@@ -102,7 +104,7 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
102 104 /// <param name="route">路径</param>
103 105 /// <param name="xFEClientInstanceRequest">请求实例</param>
104 106 /// <returns></returns>
105 public XFEClientRequesterBuilder AddRequest(string route, StandardClientInstanceRequest xFEClientInstanceRequest)
107 public ClientRequesterBuilder AddRequest(string route, StandardClientInstanceRequest xFEClientInstanceRequest)
106 108 {
107 109 _standardClientInstanceRequestDictionary.Add(route, xFEClientInstanceRequest);
108 110 return this;
@@ -115,21 +117,42 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
115 117 /// <param name="constructBody">构造请求体方法<seealso cref="object"/> (<seealso cref="string"/> session, <seealso cref="string"/> deviceInfo, <seealso cref="object"/>[] parameters)</param>
116 118 /// <param name="processResponse">处理响应方法<seealso cref="object"/> (<seealso cref="string"/> response)</param>
117 119 /// <returns></returns>
118 public XFEClientRequesterBuilder AddRequest(string route, Func<string, string, object[], object> constructBody, Func<string, object>? processResponse = null) => AddRequest(route, new StandardClientInstanceRequest
120 public ClientRequesterBuilder AddRequest(string route, Func<string, string, object[], object> constructBody, Func<string, object>? processResponse = null) => AddRequest(route, new StandardClientInstanceRequest
119 121 {
120 122 ConstructBody = constructBody,
121 123 ProcessResponse = processResponse
122 124 });
123 125
126 /// <summary>
127 /// 使用表格请求器
128 /// </summary>
129 /// <param name="tableRequester"></param>
130 /// <returns></returns>
131 public ClientRequesterBuilder UseTableRequester(TableRequester? tableRequester = null)
132 {
133 tableRequester ??= new();
134 _xFEClientRequester.TableRequester = tableRequester;
135 return this;
136 }
137
124 138 /// <summary>
125 139 /// 构建XFE客户端请求器
126 140 /// </summary>
127 141 /// <returns>XFE客户端请求器</returns>
128 public XFEClientRequester Build(XFEClientRequesterOptions options)
142 public ClientRequester Build(XFEClientRequesterOptions options)
129 143 {
130 144 _xFEClientRequester.RequestAddress = options.RequestAddress;
131 145 _xFEClientRequester.Session = options.Session;
132 146 _xFEClientRequester.DeviceInfo = options.DeviceInfo;
147 if (_xFEClientRequester.TableRequester is not null)
148 {
149 if (_xFEClientRequester.TableRequester.RequestAddress.NullOrEmpty)
150 _xFEClientRequester.TableRequester.RequestAddress = options.RequestAddress;
151 if (_xFEClientRequester.TableRequester.DeviceInfo.NullOrEmpty)
152 _xFEClientRequester.TableRequester.DeviceInfo = options.DeviceInfo;
153 if (_xFEClientRequester.TableRequester.Session.NullOrEmpty)
154 _xFEClientRequester.TableRequester.Session = options.Session;
155 }
133 156 _xFEClientRequester.RequestServiceDictionary = _requestServiceDictionary;
134 157 _xFEClientRequester.StandardRequestServiceDictionary = _standardRequestServiceDictionary;
135 158 _xFEClientRequester.WildcardStandardRequestServiceList = _wildcardStandardRequestServiceList;
@@ -141,7 +164,7 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
141 164 /// 构建XFE客户端请求器
142 165 /// </summary>
143 166 /// <returns>XFE客户端请求器</returns>
144 public XFEClientRequester Build(Action<XFEClientRequesterOptions> optionsBuilder)
167 public ClientRequester Build(Action<XFEClientRequesterOptions> optionsBuilder)
145 168 {
146 169 var options = new XFEClientRequesterOptions();
147 170 optionsBuilder(options);
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/TableRequester.cs +2 -1
@@ -2,6 +2,7 @@
2 2 using System.Text;
3 3 using System.Text.Json;
4 4 using XFEExtension.NetCore.DelegateExtension;
5 using XFEExtension.NetCore.ServerInteractive.Interfaces.Requester;
5 6 using XFEExtension.NetCore.ServerInteractive.Models;
6 7 using XFEExtension.NetCore.ServerInteractive.Models.RequesterModels;
7 8 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
@@ -12,7 +13,7 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
12 13 /// <summary>
13 14 /// 表格请求器
14 15 /// </summary>
15 public class TableRequester
16 public class TableRequester : IRequesterBase
16 17 {
17 18 /// <summary>
18 19 /// 请求地址
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/XFEDataTableManagerService.cs +1 -6
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCore.cs +2 -1