using System.Collections.Concurrent; using Autofac; using Common.Const; using DotNetty.Transport.Channels; using Entity.DbModel.Station; using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkDriver.Session; using log4net; using Service.Charger.Server; namespace Service.Charger.Client; /// /// 示例程序 /// [Scope] public static class ClientMgr { private static readonly ILog Log = LogManager.GetLogger(typeof(ClientMgr)); public static readonly ConcurrentDictionary Dictionary = new(); public static PlcClient? GetBySn(string sn) { Dictionary.TryGetValue(sn, out var o); return o; } /// /// 通过channel获取client /// /// /// /// 获取不到,client则为空 /// public static bool TryGetClient(IChannel channel, out string sn, out PlcClient? client) { string? snt = ChannelUtils.GetAttr(channel, PlcConst.ChargerSn); if (!string.IsNullOrWhiteSpace(snt)) { var chargerClient = GetBySn(snt); if (chargerClient != null) { sn = snt; client = chargerClient; return true; } } sn = string.Empty; client = null; return false; } public static void AddBySn(string sn, PlcClient client) { Dictionary[sn] = client; } //TODO 连接、鉴权,开始充电,结束充电,设置尖峰平谷,读取尖峰平谷,发送功率调节指令,发送辅助源控制指令,下发掉线停止充电, public static void InitClient() { Task.Run(() => { ConnClient(); }); } private static void ConnClient() { EquipNetInfo netInfo = new EquipNetInfo() { NetAddr = "192.168.10.1", //NetAddr = "127.0.0.1", NetPort = "2000", Code = PlcConst.ChargeEqpCode, DestAddr = "132,208,208,224" }; Log.Info($"begin to connect {netInfo.Code} {netInfo.NetAddr}:{netInfo.NetPort}"); PlcClient client = AppInfo.Container.Resolve(); client.AutoReconnect = true; //Plc编号 client.Sn = PlcConst.ChargeEqpCode; //电池仓编号 //client.BinNo = binInfo?.No; //client.BatteryNo = binInfo?.BatteryNo; client.LogName = "Charger" + netInfo.Code; client.ConnectedEventHandler += (sender, b) => { client.SessionAttr(netInfo.Code, netInfo.DestAddr); //鉴权 // client.SendAuth(); }; //ip client.InitBootstrap(netInfo.NetAddr, int.Parse(netInfo.NetPort)); /*Task.Run(() => {*/ try { client.Connect(); client.SessionAttr(netInfo.Code, netInfo.DestAddr); Log.Info($"succeed to connect {netInfo.Code} {netInfo.NetAddr}:{netInfo.NetPort}"); } catch (Exception ex) { } //}); AddBySn(netInfo.Code, client); Log.Info($"begin to connect {netInfo.Code} {netInfo.NetAddr}:{netInfo.NetPort}"); } }