@@ -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