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
+