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.TServer/Program.cs
+11
-10
Modified
XFEExtension.NetCore.ServerInteractive.Test/Program.cs
+67
-2
Modified
XFEExtension.NetCore.ServerInteractive.Test/XFEExtension.NetCore.ServerInteractive.Test.csproj
+1
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/IXFEDataTable.cs
+4
-1
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/XFEDataTable.cs
+10
-8
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/XFEDataTableManagerBuilder.cs
+9
-1
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCore.cs
+8
-2
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCoreBuilder.cs
+6
-16
Added
XFEExtension.NetCore.ServerInteractive/Utilities/ServerInteractive.cs
+407
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Services/CoreService/CoreServerExceptionProcessService.cs
+2
-1
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Services/CoreService/XFEDataTableManagerService.cs
+1
-1
Added
XFEExtension.NetCore.ServerInteractive/Utilities/TableRequestResult.cs
+27
-0
Added
XFEExtension.NetCore.ServerInteractive/Utilities/TableRequester.cs
+224
-0
Modified
XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj
+1
-1
XFEstudio/XFEExtension.NetCore.ServerInteractive
修复部分问题
028373f
代码差异
14 个文件
+778
-43
@@ -8,14 +8,15 @@ using XFEExtension.NetCore.ServerInteractive.Utilities.Server;
8
8
9
9
var server = XFEServerBuilder.CreateBuilder()
10
10
.UseXFEServer()
11
.AddCoreServer(
12
XFEServerCoreBuilder.CreateBuilder()
13
.UseXFEStandardServerCore(() => UserProfile.UserTable,
14
() => UserProfile.EncryptedUserLoginModelTable,
15
UserProfile.EncryptedUserLoginModelTable.Add,
16
user => UserProfile.EncryptedUserLoginModelTable.Remove(user),
17
XFEDataTableManagerBuilder.CreateBuilder()
18
.AddTable<Person, DataProfile>("人物", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)
19
.AddTable<Order, DataProfile>("订单", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)
20
.AddTable<User, UserProfile>("用户", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)).Build()).Build();
11
.AddCoreServer(XFEServerCoreBuilder.CreateBuilder()
12
.UseXFEStandardServerCore(static () => UserProfile.UserTable,
13
static () => UserProfile.EncryptedUserLoginModelTable,
14
UserProfile.EncryptedUserLoginModelTable.Add,
15
static user => UserProfile.EncryptedUserLoginModelTable.Remove(user),
16
XFEDataTableManagerBuilder.CreateBuilder()
17
.AddTable<Person, DataProfile>("人物", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)
18
.AddTable<Order, DataProfile>("订单", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)
19
.AddTable<User, UserProfile>("用户", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员))
20
.Build())
21
.Build();
21
22
await server.Start();
@@ -1,8 +1,73 @@
1
internal class Program
1
using System.Text.Json;
2
using XFEExtension.NetCore.ServerInteractive.TServer.Models;
3
using XFEExtension.NetCore.ServerInteractive.Utilities;
4
using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
5
using XFEExtension.NetCore.XFETransform.JsonConverter;
6
7
internal class Program
2
8
{
9
static readonly ServerInteractive serverInteractive = new("http://localhost:8080/api", DeviceHelper.GetUniqueHardwareId(), string.Empty);
10
//static readonly TableRequester tableRequester = new()
11
//{
12
// RequestAddress = "http://localhost:8080/api",
13
// ComputerInfo = DeviceHelper.GetUniqueHardwareId()!,
14
// Session = string.Empty
15
//};
16
17
[SMTest("Admin", "123456")]
18
public static async Task Login(string account, string password)
19
{
20
var session = await serverInteractive.Login(account, password);
21
Console.WriteLine(session);
22
QueryableJsonNode jsonNode = session;
23
serverInteractive.TableRequester.Session = jsonNode["session"];
24
}
25
26
//[SMTest]
27
public static string ConvertOrder()
28
{
29
var order = new Order()
30
{
31
Description = "测试订单的描述",
32
Name = "测试订单"
33
};
34
return JsonSerializer.Serialize(order);
35
}
36
37
//[SMTest]
38
public static async Task<bool> AddOrder() => await serverInteractive.TableRequester.Add<Order>(new()
39
{
40
Description = "测试订单的描述",
41
Name = "测试订单"
42
});
43
3
44
[SMTest]
4
public static void TestMethod()
45
public static async Task GetOrder()
5
46
{
47
var result = await serverInteractive.TableRequester.Get<Order>();
48
foreach (var order in result.DataList)
49
{
50
Console.WriteLine($"ID:{order.ID}\tName:{order.Name}\tDS:{order.Description}");
51
}
52
}
6
53
54
[SMTest]
55
public static async Task ChangeOrder()
56
{
57
var result = await serverInteractive.TableRequester.Get<Order>();
58
var order = result.DataList[0];
59
Console.WriteLine($"ID:{order.ID}\tName:{order.Name}\tDS:{order.Description}");
60
order.Description = "这是一条修改后的测试订单";
61
order.Name = "Test001";
62
await serverInteractive.TableRequester.Change(order);
63
}
64
[SMTest]
65
public static async Task GetOrder2()
66
{
67
var result = await serverInteractive.TableRequester.Get<Order>();
68
foreach (var order in result.DataList)
69
{
70
Console.WriteLine($"ID:{order.ID}\tName:{order.Name}\tDS:{order.Description}");
71
}
7
72
}
8
73
}
@@ -12,6 +12,7 @@
12
12
</ItemGroup>
13
13
14
14
<ItemGroup>
15
<ProjectReference Include="..\XFEExtension.NetCore.ServerInteractive.TServer\XFEExtension.NetCore.ServerInteractive.TServer.csproj" />
15
16
<ProjectReference Include="..\XFEExtension.NetCore.ServerInteractive\XFEExtension.NetCore.ServerInteractive.csproj" />
16
17
</ItemGroup>
17
18
@@ -1,6 +1,5 @@
1
1
using System.Net;
2
2
using System.Text.Json;
3
using XFEExtension.NetCore.CyberComm;
4
3
using XFEExtension.NetCore.ServerInteractive.Interfaces;
5
4
using XFEExtension.NetCore.ServerInteractive.Models;
6
5
using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
@@ -42,6 +41,10 @@ public interface IXFEDataTable
42
41
/// </summary>
43
42
JsonSerializerOptions? JsonSerializerOptions { get; set; }
44
43
/// <summary>
44
/// 用户Json序列化选项
45
/// </summary>
46
JsonSerializerOptions? UserJsonSerializerOptions { get; set; }
47
/// <summary>
45
48
/// 表名称,用其中元素的名称命名即可(如:Order(订单))
46
49
/// </summary>
47
50
string TableName { get; set; }
@@ -53,6 +53,8 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
53
53
public int AddPermissionLevel { get; set; } = 0;
54
54
/// <inheritdoc/>
55
55
public JsonSerializerOptions? JsonSerializerOptions { get; set; }
56
/// <inheritdoc/>
57
public JsonSerializerOptions? UserJsonSerializerOptions { get; set; }
56
58
57
59
/// <summary>
58
60
/// 创建列表并手动设置Get Set方法等
@@ -132,8 +134,8 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
132
134
switch (execute)
133
135
{
134
136
case "get":
135
Console.Write($"【{r.Args.ClientIP}】获取{TableShowName}列表请求");
136
UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, GetPermissionLevel, JsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
137
Console.Write($"【{r.Args.ClientIP}】获取{TableShowName}列表请求");
138
UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, GetPermissionLevel, UserJsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
137
139
List<T> tableList = [.. GetTableFunction()];
138
140
int pageCount = requestJsonNode["pageCount"].GetValue<int>();
139
141
if (pageCount == -1)
@@ -142,7 +144,7 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
142
144
{
143
145
totalCount = tableList.Count,
144
146
lastPage = -1,
145
data = tableList
147
dataList = tableList
146
148
}, JsonSerializerOptions), HttpStatusCode.OK);
147
149
}
148
150
else
@@ -151,8 +153,8 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
151
153
await r.Args.ReplyAndClose(JsonSerializer.Serialize(new
152
154
{
153
155
totalCount = tableList.Count,
154
lastPage = tableList.Count / pageCount,
155
data = tableList[(page * pageCount)..((page + 1) * pageCount)]
156
lastPage = (int)Math.Ceiling((double)tableList.Count / pageCount),
157
dataList = tableList[(page * pageCount)..((page + 1) * pageCount)]
156
158
}, JsonSerializerOptions));
157
159
}
158
160
break;
@@ -165,7 +167,7 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
165
167
throw new StopAction(() => { }, $"\n无法使用Json转换目标{TableShowName}信息");
166
168
}
167
169
Console.Write($":{item.ID}");
168
UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, AddPermissionLevel, JsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
170
UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, AddPermissionLevel, UserJsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
169
171
if (item.ID.IsNullOrWhiteSpace())
170
172
{
171
173
statusCode = HttpStatusCode.BadRequest;
@@ -180,7 +182,7 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
180
182
Console.Write($"【{r.Args.ClientIP}】删除{TableShowName}请求");
181
183
var id = requestJsonNode["id"].ToString();
182
184
Console.Write($":{id}");
183
UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, RemovePermissionLevel, JsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
185
UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, RemovePermissionLevel, UserJsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
184
186
if (id.IsNullOrWhiteSpace())
185
187
{
186
188
statusCode = HttpStatusCode.BadRequest;
@@ -208,7 +210,7 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
208
210
statusCode = HttpStatusCode.BadRequest;
209
211
throw new StopAction(() => { }, $"\n{TableShowName}ID不能为空");
210
212
}
211
UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, ChangePermissionLevel, JsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
213
UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, ChangePermissionLevel, UserJsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
212
214
Change(item);
213
215
r.Args.Close();
214
216
break;
@@ -4,6 +4,7 @@ using XFEExtension.NetCore.AutoImplement;
4
4
using XFEExtension.NetCore.ServerInteractive.Interfaces;
5
5
using XFEExtension.NetCore.ServerInteractive.Models;
6
6
using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
7
using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter;
7
8
8
9
namespace XFEExtension.NetCore.ServerInteractive.Utilities.DataTable;
9
10
@@ -14,6 +15,7 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.DataTable;
14
15
public abstract class XFEDataTableManagerBuilder
15
16
{
16
17
readonly List<IXFEDataTable> dataTableList = [];
18
JsonSerializerOptions userJsonSerializerOptions = new();
17
19
/// <summary>
18
20
/// 执行语句列表
19
21
/// </summary>
@@ -23,7 +25,12 @@ public abstract class XFEDataTableManagerBuilder
23
25
/// 创建构造器
24
26
/// </summary>
25
27
/// <returns></returns>
26
public static XFEDataTableManagerBuilder CreateBuilder() => new XFEDataTableManagerBuilderImpl();
28
public static XFEDataTableManagerBuilder CreateBuilder()
29
{
30
var builder = new XFEDataTableManagerBuilderImpl();
31
builder.userJsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
32
return builder;
33
}
27
34
28
35
/// <summary>
29
36
/// 添加数据表
@@ -58,6 +65,7 @@ public abstract class XFEDataTableManagerBuilder
58
65
RemovePermissionLevel = removePermissionLevel,
59
66
ChangePermissionLevel = changePermissionLevel,
60
67
GetPermissionLevel = getPermissionLevel,
68
UserJsonSerializerOptions = userJsonSerializerOptions,
61
69
JsonSerializerOptions = jsonSerializerOptions
62
70
};
63
71
dataTableList.Add(dataTable);
@@ -62,6 +62,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
62
62
63
63
private async void CyberCommServer_RequestReceived(object? sender, CyberCommRequestEventArgs e)
64
64
{
65
Console.WriteLine($"[DEBUG]接收到请求【{e.ClientIP}】");
65
66
var r = new ServerCoreReturnArgs
66
67
{
67
68
Args = e
@@ -69,10 +70,10 @@ public abstract class XFEServerCore : CoreServerServiceBase
69
70
try
70
71
{
71
72
foreach (var serverCoreVerifyService in ServerCoreVerifyServiceList)
72
if (serverCoreVerifyService.VerifyRequest(sender, e, r))
73
if (!serverCoreVerifyService.VerifyRequest(sender, e, r))
73
74
return;
74
75
foreach (var serverCoreVerifyAsyncService in ServerCoreVerifyAsyncServiceList)
75
if (await serverCoreVerifyAsyncService.VerifyRequestAsync(sender, e, r))
76
if (!await serverCoreVerifyAsyncService.VerifyRequestAsync(sender, e, r))
76
77
return;
77
78
}
78
79
catch (Exception ex)
@@ -109,6 +110,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
109
110
throw new ProcessStandardRequestException("QueryableJsonNode为空");
110
111
if (!execute.IsNullOrEmpty())
111
112
{
113
Console.WriteLine($"【{e.ClientIP}】请求方法:{execute}");
112
114
if (StandardCoreServiceDictionary.TryGetValue(execute, out var service))
113
115
{
114
116
try
@@ -125,6 +127,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
125
127
ServerException = new XFEServerCoreRequestInnerException($"请求异常:{execute}", ex)
126
128
});
127
129
}
130
Console.WriteLine($"【{e.ClientIP}】请求处理完成:{execute}");
128
131
return;
129
132
}
130
133
else if (StandardCoreAsyncServiceDictionary.TryGetValue(execute, out var serviceAsync))
@@ -143,6 +146,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
143
146
ServerException = new XFEServerCoreRequestInnerException($"请求异常:{execute}", ex)
144
147
});
145
148
}
149
Console.WriteLine($"【{e.ClientIP}】请求处理完成:{execute}");
146
150
return;
147
151
}
148
152
foreach (var key in StandardMultiCoreServiceDictionary.Keys)
@@ -163,6 +167,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
163
167
ServerException = new XFEServerCoreRequestInnerException($"请求异常:{execute}", ex)
164
168
});
165
169
}
170
Console.WriteLine($"【{e.ClientIP}】请求处理完成:{execute}");
166
171
return;
167
172
}
168
173
}
@@ -184,6 +189,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
184
189
ServerException = new XFEServerCoreRequestInnerException($"请求异常:{execute}", ex)
185
190
});
186
191
}
192
Console.WriteLine($"【{e.ClientIP}】请求处理完成:{execute}");
187
193
return;
188
194
}
189
195
}
@@ -188,14 +188,7 @@ public abstract class XFEServerCoreBuilder
188
188
/// <typeparam name="T">服务泛型</typeparam>
189
189
/// <param name="executeList">执行语句列表</param>
190
190
/// <returns>XFE服务器核心构建器</returns>
191
public XFEServerCoreBuilder RegisterStandardService<T>(List<string> executeList) where T : IServerCoreStandardRegisterService, new()
192
{
193
serverMultiStandardCoreServiceDictionary.Add(executeList, new T()
194
{
195
XFEServerCore = xFEServerCore
196
});
197
return this;
198
}
191
public XFEServerCoreBuilder RegisterStandardService<T>(List<string> executeList) where T : IServerCoreStandardRegisterService, new() => RegisterStandardService(executeList, new T());
199
192
200
193
/// <summary>
201
194
/// 注册多个执行语句的标准服务
@@ -216,14 +209,7 @@ public abstract class XFEServerCoreBuilder
216
209
/// <typeparam name="T">服务泛型</typeparam>
217
210
/// <param name="executeList">执行语句列表</param>
218
211
/// <returns>XFE服务器核心构建器</returns>
219
public XFEServerCoreBuilder RegisterStandardAsyncService<T>(List<string> executeList) where T : IServerCoreStandardRegisterAsyncService, new()
220
{
221
serverMultiStandardCoreAsyncServiceDictionary.Add(executeList, new T()
222
{
223
XFEServerCore = xFEServerCore
224
});
225
return this;
226
}
212
public XFEServerCoreBuilder RegisterStandardAsyncService<T>(List<string> executeList) where T : IServerCoreStandardRegisterAsyncService, new() => RegisterStandardAsyncService(executeList, new T());
227
213
228
214
/// <summary>
229
215
/// 构建XFE服务器核心
@@ -236,8 +222,12 @@ public abstract class XFEServerCoreBuilder
236
222
xFEServerCore.ServerCoreServiceList.Add(serverCoreService);
237
223
xFEServerCore.CyberCommServer.ServerStarted += serverCoreService.ServerStarted;
238
224
}
225
xFEServerCore.ServerCoreVerifyServiceList = serverCoreVerifyServiceList;
226
xFEServerCore.ServerCoreVerifyAsyncServiceList = serverCoreVerifyAsyncServiceList;
239
227
xFEServerCore.StandardCoreServiceDictionary = serverStandardCoreServiceDictionary;
228
xFEServerCore.StandardCoreAsyncServiceDictionary = serverStandardCoreAsyncServiceDictionary;
240
229
xFEServerCore.StandardMultiCoreServiceDictionary = serverMultiStandardCoreServiceDictionary;
230
xFEServerCore.StandardMultiCoreAsyncServiceDictionary = serverMultiStandardCoreAsyncServiceDictionary;
241
231
if (!name.IsNullOrEmpty())
242
232
xFEServerCore.CoreServerName = name;
243
233
return xFEServerCore;
@@ -0,0 +1,407 @@
1
using System.Net;
2
using System.Text.Json;
3
using XFEExtension.NetCore.DelegateExtension;
4
using XFEExtension.NetCore.ServerInteractive.Models;
5
using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
6
using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter;
7
using XFEExtension.NetCore.StringExtension.Json;
8
9
namespace XFEExtension.NetCore.ServerInteractive.Utilities;
10
11
public class ServerInteractive
12
{
13
JsonSerializerOptions jsonSerializerOptions = new();
14
/// <summary>
15
/// 请求消息返回事件
16
/// </summary>
17
public event XFEEventHandler<object?, ServerInteractiveEventArgs>? MessageReceived;
18
/// <summary>
19
/// 表格请求器
20
/// </summary>
21
public TableRequester TableRequester { get; set; }
22
23
public ServerInteractive(string requsetAddress, string computerInfo, string session)
24
{
25
jsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
26
TableRequester = new()
27
{
28
RequestAddress = requsetAddress,
29
ComputerInfo = computerInfo,
30
Session = session,
31
JsonSerializerOptions = jsonSerializerOptions
32
};
33
TableRequester.MessageReceived += TableRequester_MessageReceived;
34
}
35
36
private void TableRequester_MessageReceived(object? sender, ServerInteractiveEventArgs e) => MessageReceived?.Invoke(sender, e);
37
38
/// <summary>
39
/// 登录
40
/// </summary>
41
/// <param name="account"></param>
42
/// <param name="password"></param>
43
/// <returns></returns>
44
public async Task<string> Login(string account, string password)
45
{
46
try
47
{
48
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
49
{
50
execute = "login",
51
account,
52
password,
53
computerInfo = TableRequester.ComputerInfo
54
}.ToJson());
55
if (code == HttpStatusCode.OK)
56
{
57
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
58
return response;
59
}
60
else
61
{
62
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
63
return string.Empty;
64
}
65
}
66
catch (Exception ex)
67
{
68
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
69
return string.Empty;
70
}
71
}
72
73
/// <summary>
74
/// 登录校验
75
/// </summary>
76
/// <returns></returns>
77
public async Task<string> ReLogin()
78
{
79
try
80
{
81
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
82
{
83
execute = "relogin",
84
session = TableRequester.Session,
85
computerInfo = TableRequester.ComputerInfo
86
}.ToJson());
87
if (code == HttpStatusCode.OK)
88
{
89
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
90
return response;
91
}
92
else
93
{
94
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
95
return string.Empty;
96
}
97
}
98
catch (Exception ex)
99
{
100
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
101
return string.Empty;
102
}
103
}
104
105
/// <summary>
106
/// 获取禁止的IP地址列表
107
/// </summary>
108
/// <returns></returns>
109
public async Task<List<IPAddressInfo>> GetBannedIpAddressList()
110
{
111
try
112
{
113
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
114
{
115
execute = "get_bannedIpList",
116
session = TableRequester.Session,
117
computerInfo = TableRequester.ComputerInfo
118
}.ToJson());
119
if (code == HttpStatusCode.OK)
120
{
121
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
122
return JsonSerializer.Deserialize<List<IPAddressInfo>>(response) ?? [];
123
}
124
else
125
{
126
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
127
return [];
128
}
129
}
130
catch (Exception ex)
131
{
132
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
133
return [];
134
}
135
}
136
137
/// <summary>
138
/// 获取服务器日志
139
/// </summary>
140
/// <param name="startDateTime"></param>
141
/// <param name="endDateTime"></param>
142
/// <returns></returns>
143
public async Task<string> GetServerLog(DateTime startDateTime, DateTime endDateTime)
144
{
145
try
146
{
147
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
148
{
149
execute = "get_log",
150
startDateTime,
151
endDateTime,
152
session = TableRequester.Session,
153
computerInfo = TableRequester.ComputerInfo
154
}.ToJson());
155
if (code == HttpStatusCode.OK)
156
{
157
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
158
return response;
159
}
160
else
161
{
162
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
163
return string.Empty;
164
}
165
}
166
catch (Exception ex)
167
{
168
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
169
return string.Empty;
170
}
171
}
172
173
/// <summary>
174
/// 清空服务器日志
175
/// </summary>
176
/// <returns></returns>
177
public async Task<string> ClearServerLog()
178
{
179
try
180
{
181
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
182
{
183
execute = "clear_log",
184
session = TableRequester.Session,
185
computerInfo = TableRequester.ComputerInfo
186
}.ToJson());
187
if (code == HttpStatusCode.OK)
188
{
189
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
190
return response;
191
}
192
else
193
{
194
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
195
return string.Empty;
196
}
197
}
198
catch (Exception ex)
199
{
200
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
201
return string.Empty;
202
}
203
}
204
205
/// <summary>
206
/// 获取配置文件
207
/// </summary>
208
/// <param name="profileName"></param>
209
/// <returns></returns>
210
public async Task<string> GetProfile(string profileName)
211
{
212
try
213
{
214
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
215
{
216
execute = "get_profile",
217
profileName,
218
session = TableRequester.Session,
219
computerInfo = TableRequester.ComputerInfo
220
}.ToJson());
221
if (code == HttpStatusCode.OK)
222
{
223
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
224
return response;
225
}
226
else
227
{
228
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
229
return string.Empty;
230
}
231
}
232
catch (Exception ex)
233
{
234
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
235
return string.Empty;
236
}
237
}
238
239
/// <summary>
240
/// 更改配置文件
241
/// </summary>
242
/// <param name="profileName"></param>
243
/// <param name="profile"></param>
244
/// <returns></returns>
245
public async Task ChangeProfile(string profileName, string profile)
246
{
247
try
248
{
249
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
250
{
251
execute = "change_profile",
252
profileName,
253
profile,
254
session = TableRequester.Session,
255
computerInfo = TableRequester.ComputerInfo
256
}.ToJson());
257
if (code == HttpStatusCode.OK)
258
{
259
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
260
}
261
else
262
{
263
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
264
}
265
}
266
catch (Exception ex)
267
{
268
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
269
}
270
}
271
272
/// <summary>
273
/// 添加禁止的IP地址
274
/// </summary>
275
/// <param name="bannedIp"></param>
276
/// <param name="notes"></param>
277
/// <returns></returns>
278
public async Task AddBannedIpAddress(string bannedIp, string notes = "")
279
{
280
try
281
{
282
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
283
{
284
execute = "add_bannedIp",
285
bannedIp,
286
notes,
287
session = TableRequester.Session,
288
computerInfo = TableRequester.ComputerInfo
289
}.ToJson());
290
if (code == HttpStatusCode.OK)
291
{
292
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
293
}
294
else
295
{
296
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
297
}
298
}
299
catch (Exception ex)
300
{
301
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
302
}
303
}
304
305
/// <summary>
306
/// 移除禁止的IP地址
307
/// </summary>
308
/// <param name="bannedIp"></param>
309
/// <returns></returns>
310
public async Task RemoveBannedIpAddress(string bannedIp)
311
{
312
try
313
{
314
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
315
{
316
execute = "remove_bannedIp",
317
bannedIp,
318
session = TableRequester.Session,
319
computerInfo = TableRequester.ComputerInfo
320
}.ToJson());
321
if (code == HttpStatusCode.OK)
322
{
323
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
324
}
325
else
326
{
327
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
328
}
329
}
330
catch (Exception ex)
331
{
332
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
333
}
334
}
335
336
/// <summary>
337
/// 管理员更改账户请求
338
/// </summary>
339
/// <param name="id"></param>
340
/// <param name="changedAccount"></param>
341
/// <returns></returns>
342
public async Task<bool> AdminChangeAccount(string id, string changedAccount)
343
{
344
try
345
{
346
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
347
{
348
execute = "change_account",
349
changedAccount,
350
id,
351
session = TableRequester.Session,
352
computerInfo = TableRequester.ComputerInfo
353
}.ToJson());
354
if (code == HttpStatusCode.OK)
355
{
356
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
357
return true;
358
}
359
else
360
{
361
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
362
return false;
363
}
364
}
365
catch (Exception ex)
366
{
367
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
368
return false;
369
}
370
}
371
372
/// <summary>
373
/// 管理员更改密码请求
374
/// </summary>
375
/// <param name="id"></param>
376
/// <param name="changedPassword"></param>
377
/// <returns></returns>
378
public async Task<bool> AdminChangePassword(string id, string changedPassword)
379
{
380
try
381
{
382
var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
383
{
384
execute = "change_password",
385
id,
386
changedPassword,
387
session = TableRequester.Session,
388
computerInfo = TableRequester.ComputerInfo
389
}.ToJson());
390
if (code == HttpStatusCode.OK)
391
{
392
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
393
return true;
394
}
395
else
396
{
397
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
398
return false;
399
}
400
}
401
catch (Exception ex)
402
{
403
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
404
return false;
405
}
406
}
407
}
@@ -23,7 +23,8 @@ public class CoreServerExceptionProcessService : ServerCoreRegisterServiceBase
23
23
if (!e.Handled && e.CyberCommRequestEventArgs is not null)
24
24
{
25
25
Console.WriteLine($"[WARN]【{e.CyberCommRequestEventArgs.ClientIP}】{e.ServerException?.Message}");
26
Console.WriteLine($"[TRACE]{e.ServerException?.StackTrace}");
26
if (e.ServerException?.StackTrace is not null)
27
Console.WriteLine($"[TRACE]{e.ServerException?.StackTrace}");
27
28
await e.CyberCommRequestEventArgs.ReplyAndClose(e.ServerException?.Message ?? "服务器内部异常", e.StatusCode);
28
29
}
29
30
}
@@ -13,7 +13,7 @@ public class XFEDataTableManagerService : ServerCoreStandardRegisterAsyncService
13
13
/// <summary>
14
14
/// 数据表格管理器
15
15
/// </summary>
16
public XFEDataTableManager TableManager { get; set; } = new XFEDataTableManagerImpl();
16
public XFEDataTableManager TableManager { get; set; }
17
17
18
18
/// <inheritdoc/>
19
19
public override async Task StandardRequestReceived(string execute, QueryableJsonNode queryableJsonNode, ServerCoreReturnArgs r) => await TableManager.Execute(execute, queryableJsonNode, r);
@@ -0,0 +1,27 @@
1
using System.Text.Json.Serialization;
2
using XFEExtension.NetCore.ServerInteractive.Models;
3
4
namespace XFEExtension.NetCore.ServerInteractive.Utilities;
5
6
/// <summary>
7
/// 表格请求结果
8
/// </summary>
9
/// <typeparam name="T"></typeparam>
10
public class TableRequestResult<T> where T : IIDModel
11
{
12
/// <summary>
13
/// 数据列表
14
/// </summary>
15
[JsonPropertyName("dataList")]
16
public List<T> DataList { get; set; } = [];
17
/// <summary>
18
/// 最后一页
19
/// </summary>
20
[JsonPropertyName("lastPage")]
21
public int LastPage { get; set; }
22
/// <summary>
23
/// 总计数量
24
/// </summary>
25
[JsonPropertyName("totalCount")]
26
public int TotalCount { get; set; }
27
}