diff --git a/SocketHub/NLog.config b/SocketHub/NLog.config new file mode 100644 index 0000000..1067898 --- /dev/null +++ b/SocketHub/NLog.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SocketHub/Program.cs b/SocketHub/Program.cs index 148bea5..2f10ae0 100644 --- a/SocketHub/Program.cs +++ b/SocketHub/Program.cs @@ -1,26 +1,27 @@ -using System.Buffers; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using NLog.Extensions.Hosting; using SuperSocket.ProtoBase; using SuperSocket.Server; using SuperSocket.Server.Abstractions; +using SuperSocket.Server.Abstractions.Session; using SuperSocket.Server.Host; +using SuperSocket.WebSocket; using SuperSocket.WebSocket.Server; +using System.Buffers; var host = Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { - + services.AddSingleton, TcpPackageHandler>(); + services.AddSingleton(); }) .AsMultipleServerHostBuilder() .AddServer(builder => { builder - .UsePackageHandler(async (session, package) => - { - Console.WriteLine($"Magic={package.Magic:X4}, Type={package.Type}, Len={package.Length}"); - await session.SendAsync(package.Payload); - }) .ConfigureServerOptions((ctx, config) => { return config.GetSection("TcpServer"); @@ -31,14 +32,21 @@ var host = Host.CreateDefaultBuilder(args) builder .UseWebSocketMessageHandler(async (session, package) => { - Console.WriteLine($"[WebSocket] ${package.Message}"); - await session.SendAsync("ok"); + using var scope = session.Server.ServiceProvider.CreateScope(); + var handler = scope.ServiceProvider.GetRequiredService(); + + await handler.HandleAsync(session, package); }) .ConfigureServerOptions((ctx, config) => { return config.GetSection("WebSocketServer"); }); }) + .ConfigureLogging(logging => + { + logging.ClearProviders(); + }) + .UseNLog() .Build(); await host.RunAsync(); @@ -52,8 +60,40 @@ public class TcpService : SuperSocketService } } +public class TcpPackageHandler : IPackageHandler +{ + private readonly ILogger _logger; + + public TcpPackageHandler(ILogger logger) + { + _logger = logger; + } + + public async ValueTask Handle(IAppSession session, ProtocolFrame package, CancellationToken cancellationToken) + { + _logger.LogInformation($"Magic={package.Magic:X4}, Type={package.Type}, Len={package.Length}"); + await session.SendAsync(package.Payload, cancellationToken); + } +} + +public class WebSocketMessageHandler +{ + private readonly ILogger _logger; + + public WebSocketMessageHandler(ILogger logger) + { + _logger = logger; + } + + public async ValueTask HandleAsync(WebSocketSession session, WebSocketPackage package) + { + _logger.LogInformation($"[WebSocket] {package.Message}"); + await session.SendAsync("ok"); + } +} + /// -/// 协议数据结构 +/// 协议数据结构 示例:65 6D 00 05 00 01 68 65 6C 6C 6F /// /// 帧头标识 /// 数据长度 diff --git a/SocketHub/SocketHub.csproj b/SocketHub/SocketHub.csproj index 459a0df..1cff380 100644 --- a/SocketHub/SocketHub.csproj +++ b/SocketHub/SocketHub.csproj @@ -8,15 +8,26 @@ + + + + + Always + + + Always + + Always +