Skip to content

Commit 8ba9e20

Browse files
committed
[修改]1. 修改服务的融合
1 parent 2df019f commit 8ba9e20

1 file changed

Lines changed: 44 additions & 29 deletions

File tree

GameFrameX.StartUp/AppStartUpByServer.cs

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ protected async Task StartServerAsync<TMessageDecoderHandler, TMessageEncoderHan
6666
where TMessageDecoderHandler : class, IMessageDecoderHandler, IPackageDecoder<IMessage>, new()
6767
where TMessageEncoderHandler : class, IMessageEncoderHandler, IPackageEncoder<IMessage>, new()
6868
{
69-
// 先启动TCP服务器
70-
await StartServer<TMessageDecoderHandler, TMessageEncoderHandler>(baseHandler, httpFactory, aopHandlerTypes, minimumLevelLogLevel);
69+
// 启动服务器
70+
await StartServer<TMessageDecoderHandler>(baseHandler, httpFactory, aopHandlerTypes, minimumLevelLogLevel);
7171

7272
// 初始化消息处理器
7373
if (MessageDecoderHandler.IsNull())
@@ -177,35 +177,44 @@ async void InvokeAction()
177177

178178
#region TCP Server
179179

180-
private IServer _gameServer;
180+
private IHost _gameServer;
181181

182182
/// <summary>
183183
/// 启动TCP服务器
184184
/// </summary>
185185
/// <typeparam name="TMessageDecoderHandler">消息解码处理器类型</typeparam>
186-
/// <typeparam name="TMessageEncoderHandler">消息编码处理器类型</typeparam>
187186
/// <param name="baseHandler">HTTP处理器列表,用于处理不同的HTTP请求</param>
188187
/// <param name="httpFactory">HTTP处理器工厂,根据命令标识符创建对应的处理器实例</param>
189188
/// <param name="aopHandlerTypes">AOP处理器列表,用于在HTTP请求处理前后执行额外的逻辑</param>
190189
/// <param name="minimumLevelLogLevel">日志记录的最小级别,用于控制日志输出</param>
191-
private async Task StartServer<TMessageDecoderHandler, TMessageEncoderHandler>(List<BaseHttpHandler> baseHandler, Func<string, BaseHttpHandler> httpFactory, List<IHttpAopHandler> aopHandlerTypes = null, LogLevel minimumLevelLogLevel = LogLevel.Debug)
190+
private async Task StartServer<TMessageDecoderHandler>(List<BaseHttpHandler> baseHandler, Func<string, BaseHttpHandler> httpFactory, List<IHttpAopHandler> aopHandlerTypes = null, LogLevel minimumLevelLogLevel = LogLevel.Debug)
192191
where TMessageDecoderHandler : class, IMessageDecoderHandler, IPackageDecoder<IMessage>, new()
193-
where TMessageEncoderHandler : class, IMessageEncoderHandler, IPackageEncoder<IMessage>, new()
194192
{
195-
var hostBuilder = MultipleServerHostBuilder.Create();
193+
var multipleServerHostBuilder = MultipleServerHostBuilder.Create();
196194
// 检查TCP端口是否可用
197195
if (Setting.InnerPort > 0 && NetHelper.PortIsAvailable(Setting.InnerPort))
198196
{
199197
LogHelper.InfoConsole($"启动 [TCP] 服务器 - 类型: {ServerType}, 地址: {Setting.InnerIp}, 端口: {Setting.InnerPort}");
200-
hostBuilder.AddServer<IMessage, MessageObjectPipelineFilter>(builder =>
198+
multipleServerHostBuilder.AddServer<IMessage, MessageObjectPipelineFilter>(builder =>
201199
{
202-
builder.ConfigureSuperSocket(ConfigureSuperSocket)
203-
.UseClearIdleSession()
204-
.UsePackageDecoder<TMessageDecoderHandler>()
205-
.UsePackageEncoder<TMessageEncoderHandler>()
206-
.UseSessionHandler(OnConnected, OnDisconnected)
207-
.UsePackageHandler(PackageHandler, PackageErrorHandler)
208-
.UseInProcSessionContainer();
200+
builder
201+
.UseClearIdleSession()
202+
.UsePackageDecoder<TMessageDecoderHandler>()
203+
.UseSessionHandler(OnConnected, OnDisconnected)
204+
.UsePackageHandler(PackageHandler, PackageErrorHandler)
205+
.UseInProcSessionContainer()
206+
.ConfigureServices((context, serviceCollection) =>
207+
{
208+
serviceCollection.Configure<ServerOptions>(options =>
209+
{
210+
var listenOptions = new ListenOptions()
211+
{
212+
Ip = "Any",
213+
Port = Setting.InnerPort,
214+
};
215+
options.AddListener(listenOptions);
216+
});
217+
});
209218
});
210219
LogHelper.InfoConsole($"启动 [TCP] 服务器启动完成 - 类型: {ServerType}, 地址: {Setting.InnerIp}, 端口: {Setting.InnerPort}");
211220
}
@@ -220,11 +229,23 @@ private async Task StartServer<TMessageDecoderHandler, TMessageEncoderHandler>(L
220229
LogHelper.InfoConsole("启动 [WebSocket] 服务器...");
221230

222231
// 配置并启动WebSocket服务器
223-
hostBuilder.AddWebSocketServer(builder =>
232+
multipleServerHostBuilder.AddWebSocketServer(builder =>
224233
{
225-
builder.ConfigureSuperSocket(ConfigureWebServer)
226-
.UseWebSocketMessageHandler(WebSocketMessageHandler)
227-
.UseSessionHandler(OnConnected, OnDisconnected);
234+
builder
235+
.UseWebSocketMessageHandler(WebSocketMessageHandler)
236+
.UseSessionHandler(OnConnected, OnDisconnected)
237+
.ConfigureServices((context, serviceCollection) =>
238+
{
239+
serviceCollection.Configure<ServerOptions>(options =>
240+
{
241+
var listenOptions = new ListenOptions()
242+
{
243+
Ip = "Any",
244+
Port = Setting.WsPort,
245+
};
246+
options.AddListener(listenOptions);
247+
});
248+
});
228249
});
229250
LogHelper.InfoConsole($"启动 [WebSocket] 服务器启动完成 - 类型: {ServerType}, 端口: {Setting.WsPort}");
230251
}
@@ -233,18 +254,19 @@ private async Task StartServer<TMessageDecoderHandler, TMessageEncoderHandler>(L
233254
LogHelper.WarnConsole($"启动 [WebSocket] 服务器启动失败 - 类型: {ServerType}, 端口: {Setting.WsPort}, 原因: 端口无效或已被占用");
234255
}
235256

257+
// await StartHttpServerAsync(hostBuilder,baseHandler, httpFactory, aopHandlerTypes, minimumLevelLogLevel);
236258
await StartHttpServer(baseHandler, httpFactory, aopHandlerTypes, minimumLevelLogLevel);
237259

238260
// 配置日志
239-
hostBuilder.ConfigureLogging(logging =>
261+
multipleServerHostBuilder.ConfigureLogging(logging =>
240262
{
241263
logging.ClearProviders();
242264
logging.AddSerilog(Log.Logger, true);
243265
logging.SetMinimumLevel(minimumLevelLogLevel);
244266
});
245267

246268
// 配置监控和跟踪
247-
hostBuilder.ConfigureServices(services =>
269+
multipleServerHostBuilder.ConfigureServices(services =>
248270
{
249271
services.AddOpenTelemetry()
250272
.ConfigureResource(configure => { configure.AddService(Setting.ServerName + "-" + Setting.TagName, "GameFrameX").AddTelemetrySdk(); })
@@ -256,14 +278,7 @@ private async Task StartServer<TMessageDecoderHandler, TMessageEncoderHandler>(L
256278
});
257279

258280
// 构建并启动服务器
259-
_gameServer = hostBuilder.BuildAsServer();
260-
261-
var messageEncoderHandler = (IMessageEncoderHandler)_gameServer.ServiceProvider.GetService<IPackageEncoder<IMessage>>();
262-
var messageDecoderHandler = (IMessageDecoderHandler)_gameServer.ServiceProvider.GetService<IPackageDecoder<IMessage>>();
263-
264-
MessageDecoderHandler = messageDecoderHandler;
265-
MessageEncoderHandler = messageEncoderHandler;
266-
281+
_gameServer = multipleServerHostBuilder.Build();
267282
await _gameServer.StartAsync();
268283
}
269284

0 commit comments

Comments
 (0)