diff --git a/backend/Magic.Core/Magic.Core.csproj b/backend/Magic.Core/Magic.Core.csproj index bbb1961d6638a5e2e0eaac02fcd1c994bb08ce6b..d303e0c44b34fe0a67925f822ef18e05c8161e65 100644 --- a/backend/Magic.Core/Magic.Core.csproj +++ b/backend/Magic.Core/Magic.Core.csproj @@ -36,15 +36,10 @@ - - - - - diff --git a/backend/Magic.Web.Core/Controller/Tcp/TcpServiceController.cs b/backend/Magic.Web.Core/Controller/Tcp/TcpServiceController.cs new file mode 100644 index 0000000000000000000000000000000000000000..5ae059a8cadf11d694560a8e5e2cdb968d8912b9 --- /dev/null +++ b/backend/Magic.Web.Core/Controller/Tcp/TcpServiceController.cs @@ -0,0 +1,53 @@ +using Furion.DynamicApiController; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TouchSocket.Sockets; + +namespace Magic.Web.Core +{ + /// + /// 系统菜单服务 + /// + [ApiDescriptionSettings(Name = "Tcp", Order = 100, Tag = "Tcp服务器")] + [AllowAnonymous] + public class TcpServiceController : IDynamicApiController + { + private readonly ITcpService m_tcpService; + + public TcpServiceController(ITcpService tcpService) + { + this.m_tcpService = tcpService; + } + + /// + /// 获取所有连接到的客户端Id。 + /// + /// + [HttpGet] + public IEnumerable GetClientIds() + { + return this.m_tcpService.GetIds(); + } + + /// + /// 发送消息到指定Id + /// + /// + /// + [HttpPost] + public void SendMessage(string id,[FromBody]string msg) + { + if (!this.m_tcpService.TryGetSocketClient(id,out var socketClient)) + { + throw new Exception("没有找到对于Id的客户端"); + } + + socketClient.Send(msg); + } + } +} diff --git a/backend/Magic.Web.Core/Handlers/Tcp/TcpServicePlugin.cs b/backend/Magic.Web.Core/Handlers/Tcp/TcpServicePlugin.cs new file mode 100644 index 0000000000000000000000000000000000000000..b45103a9f9b05339988179e8b6cb1ba053e55f7b --- /dev/null +++ b/backend/Magic.Web.Core/Handlers/Tcp/TcpServicePlugin.cs @@ -0,0 +1,42 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TouchSocket.Core; +using TouchSocket.Sockets; + +namespace Magic.Web.Core.Handlers.Tcp +{ + public partial class TcpServicePlugin : PluginBase + { + private readonly ILogger m_logger; + + public TcpServicePlugin(ILogger logger) + { + this.m_logger = logger; + } + + [GeneratorPlugin(nameof(ITcpConnectedPlugin.OnTcpConnected))] + public async Task OnTcpConnected(ITcpClientBase client, ConnectedEventArgs e) + { + m_logger.LogInformation("Tcp客户端已连接。信息:{0}", client.GetIPPort()); + await e.InvokeNext(); + } + + [GeneratorPlugin(nameof(ITcpDisconnectedPlugin.OnTcpDisconnected))] + public async Task OnTcpDisconnected(ITcpClientBase client, DisconnectEventArgs e) + { + m_logger.LogInformation("Tcp客户端已断开。信息:{0},断开信息:{1}", client.GetIPPort(),e.Message); + await e.InvokeNext(); + } + + [GeneratorPlugin(nameof(ITcpReceivedPlugin.OnTcpReceived))] + public async Task OnTcpReceived(ITcpClientBase client, ReceivedDataEventArgs e) + { + m_logger.LogInformation("Tcp收到信息:{0}", Encoding.UTF8.GetString(e.ByteBlock.ToArray())); + await e.InvokeNext(); + } + } +} diff --git a/backend/Magic.Web.Core/Magic.Web.Core.csproj b/backend/Magic.Web.Core/Magic.Web.Core.csproj index 27ac28a854784578debcd32fce2e1395e87caf50..97fd524fb29d82e3639a2076d2d84150cccd2533 100644 --- a/backend/Magic.Web.Core/Magic.Web.Core.csproj +++ b/backend/Magic.Web.Core/Magic.Web.Core.csproj @@ -7,14 +7,6 @@ Magic.Web.Core - - - - - - - - @@ -35,6 +27,11 @@ + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/backend/Magic.Web.Core/Magic.Web.Core.xml b/backend/Magic.Web.Core/Magic.Web.Core.xml index bcc5829ba8b1d4a574228678b3db5ddd30a50595..3f9b87830ae51e875d8a9d974b5edf6e076ebef8 100644 --- a/backend/Magic.Web.Core/Magic.Web.Core.xml +++ b/backend/Magic.Web.Core/Magic.Web.Core.xml @@ -1430,6 +1430,24 @@ + + + 系统菜单服务 + + + + + 获取所有连接到的客户端Id。 + + + + + + 发送消息到指定Id + + + + 重写 Handler 添加自动刷新 @@ -1452,5 +1470,127 @@ + + + 源生成容器特性 + + + + + 注册类型 + + + + + 实例类型 + + + + + 注册额外键 + + + + + 自动注入为单例。 + + + + + 自动注入为瞬时。 + + + + + 添加单例注入。 + + 该标签仅添加在继承的容器上时有用。 + + + + + + 添加单例注入。 + + 该标签仅添加在继承的容器上时有用。 + + + 注册类型 + 实例类型 + 注册额外键 + + + + 添加单例注入。 + + 该标签仅添加在继承的容器上时有用。 + + + 注册类型与实例类型一致 + + + + 添加单例注入。 + + 该标签仅添加在继承的容器上时有用。 + + + 注册类型 + 实例类型 + + + + 添加瞬态注入。 + + 该标签仅添加在继承的容器上时有用。 + + + + + + 添加瞬态注入。 + + 该标签仅添加在继承的容器上时有用。 + + + 注册类型 + 实例类型 + 注册额外键 + + + + 添加瞬态注入。 + + 该标签仅添加在继承的容器上时有用。 + + + 注册类型与实例类型一致 + + + + 添加瞬态注入。 + + 该标签仅添加在继承的容器上时有用。 + + + 注册类型 + 实例类型 + + + + 使用源生成插件的调用。 + + + + + 使用源生成插件的调用。 + + 插件名称,一般建议使用nameof()解决。 + + + + 标识将通过源生成器生成Rpc服务的调用委托。 + + diff --git a/backend/Magic.Web.Core/Startup.cs b/backend/Magic.Web.Core/Startup.cs index c84ed6dbe4b5b0742e5a6145cc0b5eee69821cf9..71d977eb861044ccc92db8da1eead0d5f6bd2fd8 100644 --- a/backend/Magic.Web.Core/Startup.cs +++ b/backend/Magic.Web.Core/Startup.cs @@ -4,6 +4,7 @@ using Furion.SpecificationDocument; using IGeekFan.AspNetCore.Knife4jUI; using Magic.Core; using Magic.Core.Job; +using Magic.Web.Core.Handlers.Tcp; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http.Features; @@ -15,6 +16,8 @@ using Newtonsoft.Json.Serialization; using System; using System.Net; using System.Net.Http; +using TouchSocket.Core; +using TouchSocket.Sockets; using Yitter.IdGenerator; namespace Magic.Web.Core; @@ -94,6 +97,18 @@ public class Startup : AppStartup // 注册 Log 日志订阅者 builder.AddSubscriber(); }); + + #region Tcp + services.AddTcpService(config => + { + //更多tcpService的config配置请看 http://rrqm_home.gitee.io/touchsocket/docs/current/tcpservice/ + config.SetListenIPHosts(7789) + .ConfigurePlugins(a => + { + a.Add(); + }); + }); + #endregion } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) diff --git a/backend/Magic.Web.Entry/Magic.db b/backend/Magic.Web.Entry/Magic.db index 0ff5024b324283e57fce0a63fa936646a505cdb5..74ae123d2538bab0fb679947143b1eed8248fc83 100644 Binary files a/backend/Magic.Web.Entry/Magic.db and b/backend/Magic.Web.Entry/Magic.db differ