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

准备测试

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

代码差异

14 个文件 +156 -744
Added XFEExtension.NetCore.ServerInteractive.TServer/Models/Order.cs +10 -0
@@ -0,0 +1,10 @@
1 using XFEExtension.NetCore.ServerInteractive.Models;
2
3 namespace XFEExtension.NetCore.ServerInteractive.TServer.Models;
4
5 public class Order : IIDModel
6 {
7 public string ID { get; set; } = Guid.NewGuid().ToString();
8 public string Description { get; set; } = string.Empty;
9 public string Name { get; set; } = string.Empty;
10 }
Added XFEExtension.NetCore.ServerInteractive.TServer/Models/Person.cs +10 -0
@@ -0,0 +1,10 @@
1 using XFEExtension.NetCore.ServerInteractive.Models;
2
3 namespace XFEExtension.NetCore.ServerInteractive.TServer.Models;
4
5 public class Person : IIDModel
6 {
7 public string ID { get; set; } = Guid.NewGuid().ToString();
8 public string Name { get; set; } = string.Empty;
9 public string Address { get; set; } = string.Empty;
10 }
Added XFEExtension.NetCore.ServerInteractive.TServer/Models/UserRole.cs +15 -0
@@ -0,0 +1,15 @@
1 namespace XFEExtension.NetCore.ServerInteractive.TServer.Models;
2
3 /// <summary>
4 /// 用户角色
5 /// </summary>
6 public enum UserRole
7 {
8 经理 = 6,
9 审核员 = 5,
10 业务员 = 4,
11 操作员 = 3,
12 理费员 = 2,
13 会计员 = 1,
14 无权限 = 0
15 }
Added XFEExtension.NetCore.ServerInteractive.TServer/Profiles/DataProfile.cs +17 -0
@@ -0,0 +1,17 @@
1 using XFEExtension.NetCore.AutoConfig;
2 using XFEExtension.NetCore.ServerInteractive.TServer.Models;
3
4 namespace XFEExtension.NetCore.ServerInteractive.TServer.Profiles;
5
6 public partial class DataProfile : XFEProfile
7 {
8 [ProfileProperty]
9 [ProfilePropertyAddGet("Current.personTable.CurrentProfile = Current")]
10 [ProfilePropertyAddGet("return Current.personTable")]
11 private ProfileList<Person> personTable = [];
12
13 [ProfileProperty]
14 [ProfilePropertyAddGet("Current.orderTable.CurrentProfile = Current")]
15 [ProfilePropertyAddGet("return Current.orderTable")]
16 private ProfileList<Order> orderTable = [];
17 }
Added XFEExtension.NetCore.ServerInteractive.TServer/Profiles/UserProfile.cs +29 -0
@@ -0,0 +1,29 @@
1 using XFEExtension.NetCore.AutoConfig;
2 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
3 using XFEExtension.NetCore.ServerInteractive.TServer.Models;
4
5 namespace XFEExtension.NetCore.ServerInteractive.TServer;
6
7 public partial class UserProfile : XFEProfile
8 {
9 /// <summary>
10 /// 用户列表
11 /// </summary>
12 [ProfileProperty]
13 [ProfilePropertyAddGet("Current.userList.CurrentProfile = Current")]
14 [ProfilePropertyAddGet("return Current.userList")]
15 private ProfileList<User> userList = [new()
16 {
17 NickName = "XFEstudio",
18 UserName = "Admin",
19 Password = "123456",
20 PermissionLevel = (int)UserRole.经理
21 }];
22 /// <summary>
23 /// 加密的用户登录列表
24 /// </summary>
25 [ProfileProperty]
26 [ProfilePropertyAddGet("Current.encryptedUserLoginList.CurrentProfile = Current")]
27 [ProfilePropertyAddGet("return Current.encryptedUserLoginList")]
28 private ProfileList<EncryptedUserLoginModel> encryptedUserLoginList = [];
29 }
Added XFEExtension.NetCore.ServerInteractive.TServer/Program.cs +15 -0
@@ -0,0 +1,15 @@
1 using XFEExtension.NetCore.ServerInteractive.TServer;
2 using XFEExtension.NetCore.ServerInteractive.Utilities;
3 using XFEExtension.NetCore.ServerInteractive.Utilities.DataTable;
4 using XFEExtension.NetCore.ServerInteractive.Utilities.Server;
5
6 var server = XFEServerBuilder.CreateBuilder()
7 .UseXFEServer()
8 .AddCoreServer(
9 XFEServerCoreBuilder.CreateBuilder()
10 .UseXFEStandardServerCore(()=>UserProfile.UserList,
11 ()=>UserProfile.EncryptedUserLoginList,
12 UserProfile.EncryptedUserLoginList.Add,
13 user=>UserProfile.EncryptedUserLoginList.Remove(user),
14 XFEDataTableManagerBuilder.CreateBuilder()
15 .AddTable()).Build()).Build();
Added XFEExtension.NetCore.ServerInteractive.TServer/XFEExtension.NetCore.ServerInteractive.TServer.csproj +14 -0
@@ -0,0 +1,14 @@
1 <Project Sdk="Microsoft.NET.Sdk">
2
3 <PropertyGroup>
4 <OutputType>Exe</OutputType>
5 <TargetFramework>net8.0</TargetFramework>
6 <ImplicitUsings>enable</ImplicitUsings>
7 <Nullable>enable</Nullable>
8 </PropertyGroup>
9
10 <ItemGroup>
11 <ProjectReference Include="..\XFEExtension.NetCore.ServerInteractive\XFEExtension.NetCore.ServerInteractive.csproj" />
12 </ItemGroup>
13
14 </Project>
Modified XFEExtension.NetCore.ServerInteractive.slnx +1 -0
@@ -1,4 +1,5 @@
1 1 <Solution>
2 2 <Project Path="XFEExtension.NetCore.ServerInteractive.Test/XFEExtension.NetCore.ServerInteractive.Test.csproj" />
3 <Project Path="XFEExtension.NetCore.ServerInteractive.TServer/XFEExtension.NetCore.ServerInteractive.TServer.csproj" Id="48ae17dc-8466-413f-8e8e-cbfc6f59fbe8" />
3 4 <Project Path="XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj" />
4 5 </Solution>
Modified XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/XFEDataTableManagerBuilder.cs +1 -1
@@ -70,7 +70,7 @@ public abstract class XFEDataTableManagerBuilder
70 70 /// <param name="getEncryptedUserLoginModelFunction"></param>
71 71 /// <param name="getUsersFunction"></param>
72 72 /// <returns></returns>
73 public XFEDataTableManager Build(Func<IEnumerable<EncryptedUserLoginModel>> getEncryptedUserLoginModelFunction, Func<IEnumerable<IUserInfo>> getUsersFunction)
73 public XFEDataTableManager Build(Func<IEnumerable<IUserInfo>> getUsersFunction, Func<IEnumerable<EncryptedUserLoginModel>> getEncryptedUserLoginModelFunction)
74 74 {
75 75 var xFEDataTableManager = new XFEDataTableManagerImpl();
76 76 foreach (var table in dataTableList)
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerBuilder.cs +5 -3
@@ -11,6 +11,7 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Server;
11 11 public abstract class XFEServerBuilder
12 12 {
13 13 bool addedProcessServiced = false;
14 ICoreServerProcessService? coreServerProcess;
14 15 readonly List<ICoreServerService> coreServerServiceList = [];
15 16
16 17 /// <summary>
@@ -113,8 +114,7 @@ public abstract class XFEServerBuilder
113 114 if (coreServerProcessService is null)
114 115 throw new XFEServerBuilderException("处理器为空", new ArgumentNullException(nameof(coreServerProcessService)));
115 116 addedProcessServiced = true;
116 coreServerProcessService.CoreServerServiceList = coreServerServiceList;
117 XFEServer.CoreServerProcessService = coreServerProcessService;
117 coreServerProcess = coreServerProcessService;
118 118 return this;
119 119 }
120 120
@@ -132,8 +132,10 @@ public abstract class XFEServerBuilder
132 132 /// <exception cref="XFEServerBuilderException">未添加核心处理器异常</exception>
133 133 public XFEServer Build()
134 134 {
135 if (!addedProcessServiced)
135 if (!addedProcessServiced || coreServerProcess is null)
136 136 throw new XFEServerBuilderException("未添加核心处理器!");
137 coreServerProcess.CoreServerServiceList = coreServerServiceList;
138 XFEServer.CoreServerProcessService = coreServerProcess;
137 139 return XFEServer;
138 140 }
139 141 }
Deleted XFEExtension.NetCore.ServerInteractive/Utilities/ServerInteractive.cs +0 -482
@@ -1,482 +0,0 @@
1 using System.Net;
2 using System.Text.Json;
3 using XFEExtension.NetCore.DelegateExtension;
4 using XFEExtension.NetCore.ServerInteractive.Interfaces;
5 using XFEExtension.NetCore.ServerInteractive.Models;
6 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
7 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
8 using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter;
9 using XFEExtension.NetCore.StringExtension.Json;
10
11 namespace XFEExtension.NetCore.ServerInteractive.Utilities;
12
13 /// <summary>
14 /// 服务器交互类
15 /// </summary>
16 public class ServerInteractive
17 {
18 JsonSerializerOptions jsonSerializerOptions = new();
19 /// <summary>
20 /// 请求消息返回事件
21 /// </summary>
22 public event XFEEventHandler<object?, ServerInteractiveEventArgs>? MessageReceived;
23 /// <summary>
24 /// 表格请求器
25 /// </summary>
26 public TableRequester TableRequester { get; set; }
27
28 /// <summary>
29 /// 服务器交互类
30 /// </summary>
31 /// <param name="requsetAddress">请求地址</param>
32 /// <param name="computerInfo">电脑信息</param>
33 /// <param name="session">Session信息</param>
34 public ServerInteractive(string requsetAddress, string computerInfo, string session)
35 {
36 jsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
37 TableRequester = new()
38 {
39 RequestAddress = requsetAddress,
40 ComputerInfo = computerInfo,
41 Session = session,
42 JsonSerializerOptions = jsonSerializerOptions
43 };
44 TableRequester.MessageReceived += TableRequester_MessageReceived;
45 }
46
47 private void TableRequester_MessageReceived(object? sender, ServerInteractiveEventArgs e) => MessageReceived?.Invoke(sender, e);
48
49 /// <summary>
50 /// 登录
51 /// </summary>
52 /// <param name="account"></param>
53 /// <param name="password"></param>
54 /// <returns></returns>
55 public async Task<string> Login(string account, string password)
56 {
57 try
58 {
59 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
60 {
61 execute = "login",
62 account,
63 password,
64 computerInfo = TableRequester.ComputerInfo
65 }.ToJson());
66 if (code == HttpStatusCode.OK)
67 {
68 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
69 return response;
70 }
71 else
72 {
73 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
74 return string.Empty;
75 }
76 }
77 catch (Exception ex)
78 {
79 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
80 return string.Empty;
81 }
82 }
83
84 /// <summary>
85 /// 登录校验
86 /// </summary>
87 /// <returns></returns>
88 public async Task<string> ReLogin()
89 {
90 try
91 {
92 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
93 {
94 execute = "relogin",
95 session = TableRequester.Session,
96 computerInfo = TableRequester.ComputerInfo
97 }.ToJson());
98 if (code == HttpStatusCode.OK)
99 {
100 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
101 return response;
102 }
103 else
104 {
105 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
106 return string.Empty;
107 }
108 }
109 catch (Exception ex)
110 {
111 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
112 return string.Empty;
113 }
114 }
115
116 /// <summary>
117 /// 获取用户列表
118 /// </summary>
119 /// <returns></returns>
120 public async Task<List<IUserInfo>> GetUserList()
121 {
122 try
123 {
124 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
125 {
126 execute = "get_userList",
127 session = TableRequester.Session,
128 computerInfo = TableRequester.ComputerInfo
129 }.ToJson());
130 if (code == HttpStatusCode.OK)
131 {
132 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
133 return JsonSerializer.Deserialize<List<IUserInfo>>(response) ?? [];
134 }
135 else
136 {
137 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
138 return [];
139 }
140 }
141 catch (Exception ex)
142 {
143 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
144 return [];
145 }
146 }
147
148 /// <summary>
149 /// 获取用户登录列表
150 /// </summary>
151 /// <returns></returns>
152 public async Task<List<UserLoginModel>> GetUserLoginList()
153 {
154 try
155 {
156 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
157 {
158 execute = "get_userLoginList",
159 session = TableRequester.Session,
160 computerInfo = TableRequester.ComputerInfo
161 }.ToJson());
162 if (code == HttpStatusCode.OK)
163 {
164 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
165 return JsonSerializer.Deserialize<List<UserLoginModel>>(response) ?? [];
166 }
167 else
168 {
169 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
170 return [];
171 }
172 }
173 catch (Exception ex)
174 {
175 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
176 return [];
177 }
178 }
179
180 /// <summary>
181 /// 获取禁止的IP地址列表
182 /// </summary>
183 /// <returns></returns>
184 public async Task<List<IPAddressInfo>> GetBannedIpAddressList()
185 {
186 try
187 {
188 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
189 {
190 execute = "get_bannedIpList",
191 session = TableRequester.Session,
192 computerInfo = TableRequester.ComputerInfo
193 }.ToJson());
194 if (code == HttpStatusCode.OK)
195 {
196 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
197 return JsonSerializer.Deserialize<List<IPAddressInfo>>(response) ?? [];
198 }
199 else
200 {
201 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
202 return [];
203 }
204 }
205 catch (Exception ex)
206 {
207 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
208 return [];
209 }
210 }
211
212 /// <summary>
213 /// 获取服务器日志
214 /// </summary>
215 /// <param name="startDateTime"></param>
216 /// <param name="endDateTime"></param>
217 /// <returns></returns>
218 public async Task<string> GetServerLog(DateTime startDateTime, DateTime endDateTime)
219 {
220 try
221 {
222 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
223 {
224 execute = "get_log",
225 startDateTime,
226 endDateTime,
227 session = TableRequester.Session,
228 computerInfo = TableRequester.ComputerInfo
229 }.ToJson());
230 if (code == HttpStatusCode.OK)
231 {
232 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
233 return response;
234 }
235 else
236 {
237 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
238 return string.Empty;
239 }
240 }
241 catch (Exception ex)
242 {
243 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
244 return string.Empty;
245 }
246 }
247
248 /// <summary>
249 /// 清空服务器日志
250 /// </summary>
251 /// <returns></returns>
252 public async Task<string> ClearServerLog()
253 {
254 try
255 {
256 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
257 {
258 execute = "clear_log",
259 session = TableRequester.Session,
260 computerInfo = TableRequester.ComputerInfo
261 }.ToJson());
262 if (code == HttpStatusCode.OK)
263 {
264 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
265 return response;
266 }
267 else
268 {
269 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
270 return string.Empty;
271 }
272 }
273 catch (Exception ex)
274 {
275 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
276 return string.Empty;
277 }
278 }
279
280 /// <summary>
281 /// 获取配置文件
282 /// </summary>
283 /// <param name="profileName"></param>
284 /// <returns></returns>
285 public async Task<string> GetProfile(string profileName)
286 {
287 try
288 {
289 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
290 {
291 execute = "get_profile",
292 profileName,
293 session = TableRequester.Session,
294 computerInfo = TableRequester.ComputerInfo
295 }.ToJson());
296 if (code == HttpStatusCode.OK)
297 {
298 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
299 return response;
300 }
301 else
302 {
303 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
304 return string.Empty;
305 }
306 }
307 catch (Exception ex)
308 {
309 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
310 return string.Empty;
311 }
312 }
313
314 /// <summary>
315 /// 更改配置文件
316 /// </summary>
317 /// <param name="profileName"></param>
318 /// <param name="profile"></param>
319 /// <returns></returns>
320 public async Task ChangeProfile(string profileName, string profile)
321 {
322 try
323 {
324 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
325 {
326 execute = "change_profile",
327 profileName,
328 profile,
329 session = TableRequester.Session,
330 computerInfo = TableRequester.ComputerInfo
331 }.ToJson());
332 if (code == HttpStatusCode.OK)
333 {
334 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
335 }
336 else
337 {
338 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
339 }
340 }
341 catch (Exception ex)
342 {
343 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
344 }
345 }
346
347 /// <summary>
348 /// 添加禁止的IP地址
349 /// </summary>
350 /// <param name="bannedIp"></param>
351 /// <param name="notes"></param>
352 /// <returns></returns>
353 public async Task AddBannedIpAddress(string bannedIp, string notes = "")
354 {
355 try
356 {
357 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
358 {
359 execute = "add_bannedIp",
360 bannedIp,
361 notes,
362 session = TableRequester.Session,
363 computerInfo = TableRequester.ComputerInfo
364 }.ToJson());
365 if (code == HttpStatusCode.OK)
366 {
367 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
368 }
369 else
370 {
371 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
372 }
373 }
374 catch (Exception ex)
375 {
376 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
377 }
378 }
379
380 /// <summary>
381 /// 移除禁止的IP地址
382 /// </summary>
383 /// <param name="bannedIp"></param>
384 /// <returns></returns>
385 public async Task RemoveBannedIpAddress(string bannedIp)
386 {
387 try
388 {
389 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
390 {
391 execute = "remove_bannedIp",
392 bannedIp,
393 session = TableRequester.Session,
394 computerInfo = TableRequester.ComputerInfo
395 }.ToJson());
396 if (code == HttpStatusCode.OK)
397 {
398 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
399 }
400 else
401 {
402 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
403 }
404 }
405 catch (Exception ex)
406 {
407 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
408 }
409 }
410
411 /// <summary>
412 /// 管理员更改账户请求
413 /// </summary>
414 /// <param name="id"></param>
415 /// <param name="changedAccount"></param>
416 /// <returns></returns>
417 public async Task<bool> AdminChangeAccount(string id, string changedAccount)
418 {
419 try
420 {
421 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
422 {
423 execute = "change_account",
424 changedAccount,
425 id,
426 session = TableRequester.Session,
427 computerInfo = TableRequester.ComputerInfo
428 }.ToJson());
429 if (code == HttpStatusCode.OK)
430 {
431 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
432 return true;
433 }
434 else
435 {
436 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
437 return false;
438 }
439 }
440 catch (Exception ex)
441 {
442 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
443 return false;
444 }
445 }
446
447 /// <summary>
448 /// 管理员更改密码请求
449 /// </summary>
450 /// <param name="id"></param>
451 /// <param name="changedPassword"></param>
452 /// <returns></returns>
453 public async Task<bool> AdminChangePassword(string id, string changedPassword)
454 {
455 try
456 {
457 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
458 {
459 execute = "change_password",
460 id,
461 changedPassword,
462 session = TableRequester.Session,
463 computerInfo = TableRequester.ComputerInfo
464 }.ToJson());
465 if (code == HttpStatusCode.OK)
466 {
467 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
468 return true;
469 }
470 else
471 {
472 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
473 return false;
474 }
475 }
476 catch (Exception ex)
477 {
478 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
479 return false;
480 }
481 }
482 }
Deleted XFEExtension.NetCore.ServerInteractive/Utilities/TableRequester.cs +0 -213
@@ -1,213 +0,0 @@
1 using System.Net;
2 using System.Text;
3 using System.Text.Json;
4 using XFEExtension.NetCore.DelegateExtension;
5 using XFEExtension.NetCore.ServerInteractive.Models;
6 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
7 using XFEExtension.NetCore.StringExtension.Json;
8
9 namespace XFEExtension.NetCore.ServerInteractive.Utilities;
10
11 public class TableRequester
12 {
13 /// <summary>
14 /// 请求地址
15 /// </summary>
16 public required string RequestAddress { get; set; }
17 /// <summary>
18 /// 电脑信息
19 /// </summary>
20 public required string ComputerInfo { get; set; }
21 /// <summary>
22 /// 用户登录Session
23 /// </summary>
24 public required string Session { get; set; }
25 /// <summary>
26 /// Json序列化选项
27 /// </summary>
28 public JsonSerializerOptions? JsonSerializerOptions { get; set; }
29 /// <summary>
30 /// 请求消息返回事件
31 /// </summary>
32 public event XFEEventHandler<object?, ServerInteractiveEventArgs>? MessageReceived;
33
34 /// <summary>
35 /// 获取请求名称
36 /// </summary>
37 /// <typeparam name="T">请求数据类型</typeparam>
38 /// <returns>请求时所用的名称</returns>
39 public static string GetRequestName<T>() => $"{typeof(T).Name[0]}".ToLower() + typeof(T).Name[1..];
40
41 /// <summary>
42 /// 获取Table列表
43 /// </summary>
44 /// <typeparam name="T">数据类型</typeparam>
45 /// <param name="tableName">表名称</param>
46 /// <returns>表内容</returns>
47 public async Task<List<T>> Get<T>(string tableName) where T : IIDModel
48 {
49 try
50 {
51 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, new
52 {
53 execute = $"get_{tableName}",
54 session = Session,
55 computerInfo = ComputerInfo
56 }.ToJson());
57 if (code == HttpStatusCode.OK)
58 {
59 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
60 return JsonSerializer.Deserialize<List<T>>(response, JsonSerializerOptions) ?? [];
61 }
62 else
63 {
64 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
65 return [];
66 }
67 }
68 catch (Exception ex)
69 {
70 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
71 return [];
72 }
73 }
74
75 /// <summary>
76 /// 获取Table列表
77 /// </summary>
78 /// <typeparam name="T">数据类型</typeparam>
79 /// <returns>表内容</returns>
80 public async Task<List<T>> Get<T>() where T : IIDModel => await Get<T>(GetRequestName<T>());
81
82 /// <summary>
83 /// 向表中添加一个数据
84 /// </summary>
85 /// <typeparam name="T">数据类型</typeparam>
86 /// <param name="tableName">表名称</param>
87 /// <param name="data">数据</param>
88 /// <returns>是否添加成功</returns>
89 public async Task<bool> Add<T>(string tableName, T data) where T : IIDModel
90 {
91 try
92 {
93 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, new
94 {
95 execute = $"add_{tableName}",
96 data = Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonSerializer.Serialize(data, JsonSerializerOptions))),
97 session = Session,
98 computerInfo = ComputerInfo
99 }.ToJson());
100 if (code == HttpStatusCode.OK)
101 {
102 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
103 return true;
104 }
105 else
106 {
107 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
108 return false;
109 }
110 }
111 catch (Exception ex)
112 {
113 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
114 return false;
115 }
116 }
117
118 /// <summary>
119 /// 向表中添加一个数据
120 /// </summary>
121 /// <typeparam name="T">数据类型</typeparam>
122 /// <param name="data">数据</param>
123 /// <returns>是否添加成功</returns>
124 public async Task<bool> Add<T>(T data) where T : IIDModel => await Add(GetRequestName<T>(), data);
125
126 /// <summary>
127 /// 从表中删除一个数据
128 /// </summary>
129 /// <typeparam name="T">数据类型</typeparam>
130 /// <param name="tableName">表名称</param>
131 /// <param name="id">元素的ID</param>
132 /// <returns>是否删除成功</returns>
133 public async Task<bool> Remove<T>(string tableName, string id) where T : IIDModel
134 {
135 try
136 {
137 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, new
138 {
139 execute = $"remove_{tableName}",
140 id,
141 session = Session,
142 computerInfo = ComputerInfo
143 }.ToJson());
144 if (code == HttpStatusCode.OK)
145 {
146 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
147 return true;
148 }
149 else
150 {
151 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
152 return false;
153 }
154 }
155 catch (Exception ex)
156 {
157 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
158 return false;
159 }
160 }
161
162 /// <summary>
163 /// 从表中删除一个数据
164 /// </summary>
165 /// <typeparam name="T">数据类型</typeparam>
166 /// <param name="id">元素的ID</param>
167 /// <returns>是否删除成功</returns>
168 public async Task<bool> Remove<T>(string id) where T : IIDModel => await Remove<T>(GetRequestName<T>(), id);
169
170 /// <summary>
171 /// 更改表中的数据
172 /// </summary>
173 /// <typeparam name="T">数据类型</typeparam>
174 /// <param name="tableName">表名称</param>
175 /// <param name="data">数据</param>
176 /// <returns></returns>
177 public async Task<bool> Change<T>(string tableName, T data) where T : IIDModel
178 {
179 try
180 {
181 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, new
182 {
183 execute = $"change_{tableName}",
184 data = Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonSerializer.Serialize(data, JsonSerializerOptions))),
185 session = Session,
186 computerInfo = ComputerInfo
187 }.ToJson());
188 if (code == HttpStatusCode.OK)
189 {
190 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
191 return true;
192 }
193 else
194 {
195 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
196 return false;
197 }
198 }
199 catch (Exception ex)
200 {
201 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
202 return false;
203 }
204 }
205
206 /// <summary>
207 /// 更改表中的数据
208 /// </summary>
209 /// <typeparam name="T">数据类型</typeparam>
210 /// <param name="data">数据</param>
211 /// <returns>是否修改成功</returns>
212 public async Task<bool> Change<T>(T data) where T : IIDModel => await Change<T>(GetRequestName<T>(), data);
213 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/XFEServerBuilderExtensions.cs +13 -20
Modified XFEExtension.NetCore.ServerInteractive/Utilities/XFEServerCoreBuilderExtensions.cs +26 -25