using Microsoft.Extensions.DependencyInjection; using JiShe.CollectBus.Protocol.Contracts.Interfaces; using TouchSocket.Core; using TouchSocket.Sockets; namespace JiShe.CollectBus.Core.Plugins { public partial class TcpServiceReceivedPlugin(IServiceProvider serviceProvider) : PluginBase { [GeneratorPlugin(typeof(ITcpReceivedPlugin))] public async Task OnTcpReceived(ITcpSessionClient client, ReceivedDataEventArgs e) { //TODO: 电表主站到集中器的协议都是376.1协议,集中器下发到电表协议分为645-07和modbus //TODO: 水表主站到集中器的协议分为118和645-97协议 //TODO: 连接成功时获取档案信息,根据档案信息匹配协议正则获取协议服务进行监听发送 const string protocolType = "StandardProtocol"; var protocolPlugin = serviceProvider.GetKeyedService(protocolType); client.Logger.Info($"{protocolPlugin?.Get().Name},{protocolPlugin?.Get().RegularExpression}"); //从客户端收到信息 var messageHexString = Convert.ToHexString(e.ByteBlock.Span); client.Logger.Info($"[TCP] 已从{client.GetIPPort()}接收到信息:{messageHexString}"); protocolPlugin?.Received(client,e); await e.InvokeNext(); } [GeneratorPlugin(typeof(ITcpConnectingPlugin))] public async Task OnTcpConnecting(ITcpSessionClient client, ConnectingEventArgs e) { client.Logger.Info($"[TCP] ID:{client.Id} IP:{client.GetIPPort()}正在连接中..."); await e.InvokeNext(); } [GeneratorPlugin(typeof(ITcpConnectedPlugin))] public async Task OnTcpConnected(ITcpSessionClient client, ConnectedEventArgs e) { client.Logger.Info($"[TCP] ID:{client.Id} IP:{client.GetIPPort()}已连接"); await e.InvokeNext(); } [GeneratorPlugin(typeof(ITcpClosedPlugin))] public async Task OnTcpClosed(ITcpSessionClient client, ClosedEventArgs e) { client.Logger.Info($"[TCP] ID:{client.Id} IP:{client.GetIPPort()}已关闭连接"); await e.InvokeNext(); } } }