using DotNetty.Transport.Channels; using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkDriver.Session; using log4net; using Newtonsoft.Json; using Service.Car.Msg.Car.Req; using Service.Car.Msg.Host.Resp; using Service.Car.Server; namespace Service.Car.Handler; /// /// /// [Order(8)] [Scope("InstancePerDependency")] public class HeartBeatMsgHandler : SimpleChannelInboundHandler, IBaseHandler { private static readonly ILog Log = LogManager.GetLogger(typeof(HeartBeatMsgHandler)); /// /// /// /// /// /// protected override void ChannelRead0(IChannelHandlerContext ctx, HeartBeatMsg msg) { Log.Info($"receive HeartBeatMsg = {JsonConvert.SerializeObject(msg)}"); IoSession? ioSession = CarServerMgr.CarServer?.SessionMgr.GetSession(ctx.Channel.Id.ToString()); if (ioSession != null && ioSession.Key != msg.CarNo) { CarServerMgr.CarServer?.SessionMgr.ChangeSessionKey(ioSession, msg.CarNo); } if (ioSession == null) { ioSession = CarServerMgr.CarServer?.SessionMgr.GetSession(msg.CarNo); } if (ioSession != null) { ioSession.BusinessMap.AddOrUpdate("HeartBeatMsg", msg, ((s, o) => msg)); ioSession?.BusinessMap.AddOrUpdate("Connected", true, ((s, o) => true)); } if (msg.CarNo==CarServerMgr.CarServer.VIN) { HeartBeatMsgResp resp = new HeartBeatMsgResp(CarServerMgr.CarServer.StationStatus) { CarNo = msg.CarNo }; resp.InitCurrentTime(); ctx.Channel.WriteAndFlushAsync(resp); } else { HeartBeatMsgResp resp = new HeartBeatMsgResp(1) { CarNo = msg.CarNo }; resp.InitCurrentTime(); ctx.Channel.WriteAndFlushAsync(resp); } } }