XFEExtension.NetCore.ServerInteractive
[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig
关注
0
Fork
0
Star
0
返回提交历史
Added
XFEExtension.NetCore.ServerInteractive.TServer/Models/Order.cs
+10
-0
Added
XFEExtension.NetCore.ServerInteractive.TServer/Models/Person.cs
+10
-0
Added
XFEExtension.NetCore.ServerInteractive.TServer/Models/UserRole.cs
+15
-0
Added
XFEExtension.NetCore.ServerInteractive.TServer/Profiles/DataProfile.cs
+17
-0
Added
XFEExtension.NetCore.ServerInteractive.TServer/Profiles/UserProfile.cs
+29
-0
Added
XFEExtension.NetCore.ServerInteractive.TServer/Program.cs
+15
-0
Added
XFEExtension.NetCore.ServerInteractive.TServer/XFEExtension.NetCore.ServerInteractive.TServer.csproj
+14
-0
Modified
XFEExtension.NetCore.ServerInteractive.slnx
+1
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/XFEDataTableManagerBuilder.cs
+1
-1
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerBuilder.cs
+5
-3
Deleted
XFEExtension.NetCore.ServerInteractive/Utilities/ServerInteractive.cs
+0
-482
Deleted
XFEExtension.NetCore.ServerInteractive/Utilities/TableRequester.cs
+0
-213
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/XFEServerBuilderExtensions.cs
+13
-20
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/XFEServerCoreBuilderExtensions.cs
+26
-25
XFEstudio/XFEExtension.NetCore.ServerInteractive
准备测试
622316a
代码差异
14 个文件
+156
-744
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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();
@@ -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>
@@ -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>
@@ -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)
@@ -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
}
@@ -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
}
@@ -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
}