using BatCharging.Manager; using DotNetty.Transport.Channels; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Channels; using System.Threading.Tasks; namespace Module.Socket.Tool { public class ClientConnectionMonitorHandler : ChannelDuplexHandler { //ChannelInboundHandlerAdapter /// /// 监控连接 /// /// public override void HandlerAdded(IChannelHandlerContext ctx) { Console.WriteLine("Client connected: " + ctx.Channel.RemoteAddress); string input = ctx.Channel.RemoteAddress.ToString(); // 正则表达式匹配IPv4地址和端口号 string pattern = @"\[(::ffff:)?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]:(\d+)"; Match match = Regex.Match(input, pattern); // 获取IP地址(不包括IPv6前缀) string ipAddress = match.Groups[2].Value; switch (ipAddress) { case "127.0.0.1": CmnChargingsEqmInfo._ID = ctx.Channel.Id; CmnChargingsEqmInfo._CHR0IPADDR = ipAddress; CmnChargingsEqmInfo._CHR0PORT = Convert.ToInt32(match.Groups[3].Value); CmnChargingsEqmInfo._CHR01.ChargerNetHeartBeatThread(); break; case "127.0.0.2": break; case "127.0.0.3": break; case "127.0.0.4": break; case "127.0.0.5": break; case "127.0.0.6": break; case "127.0.0.7": break; case "127.0.0.8": break; } } /// /// 监控断开 /// /// public override void HandlerRemoved(IChannelHandlerContext ctx) { Console.WriteLine("Client disconnected: " + ctx.Channel.RemoteAddress); string input = ctx.Channel.RemoteAddress.ToString(); // 正则表达式匹配IPv4地址和端口号 string pattern = @"\[(::ffff:)?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]:(\d+)"; Match match = Regex.Match(input, pattern); // 获取IP地址(不包括IPv6前缀) string ipAddress = match.Groups[2].Value; switch (ipAddress) { case "127.0.0.1": CmnChargingsEqmInfo._CHR01 = null; break; case "127.0.0.2": break; case "127.0.0.3": break; case "127.0.0.4": break; case "127.0.0.5": break; case "127.0.0.6": break; case "127.0.0.7": break; case "127.0.0.8": break; } } public override void ExceptionCaught(IChannelHandlerContext ctx, Exception exception) { Console.WriteLine("Exception in ClientConnectionMonitorHandler: " + exception.Message); ctx.Channel.DisconnectAsync(); } } }