// GET: Device public ActionResult Index(int id) { Device d = null; using (var ctx = new GlsunViewEntities()) { d = ctx.Device.Find(id); } //IP地址->连接服务->实例化一个状态类->填充状态 //TcpClientService tcp = new TcpClientService(d.DAddress, d.DPort.Value); //var tcp = TcpClientServiceTool.GetService(d.DAddress, d.DPort.Value); var tcp = TcpClientServicePool.GetService(d.DAddress, d.DPort.Value); NMUCommService nmu = new NMUCommService(tcp); DeviceOverview deviceView = new DeviceOverview(); deviceView.IP = d.DAddress; deviceView.Port = d.DPort.Value; try { //tcp.Connect(); //tcp.ConnectTimeout = 3000; if (tcp != null) { deviceView.RefreshStatus(nmu); //TcpClientServiceTool.SetServiceFree(tcp); TcpClientServicePool.FreeService(tcp); } else { throw new TimeoutException("设备连接超时"); } } catch (Exception ex) { deviceView.Type = "NoResponse"; deviceView.Unit = 4; } if (deviceView.Slots == null) { deviceView.Slots = new List <Slot>(); } JavaScriptSerializer serializer = new JavaScriptSerializer(); ViewBag.DeviceInfo = serializer.Serialize(deviceView); return(View(d)); }
public ActionResult GetCardInfo(string ip, int port) { //更新插卡信息 //更新卡的状态 var ret = new JsonResult(); var tcp = TcpClientServicePool.GetService(ip, port); if (tcp != null) { try { string key = string.Format("card_info_{0}:{1}", ip, port); NMUCommService nmu = new NMUCommService(tcp); DeviceOverview deviceView = new DeviceOverview(); deviceView.RefreshStatus(nmu); deviceView.IP = ip; deviceView.Port = port; var cardSlotInfo = GetCardSlotInfo(tcp, deviceView); tcp.IsBusy = false; ret.Data = new { Code = "", Data = cardSlotInfo }; } catch (Exception ex) { ret.Data = new { Code = "Exception", Data = ex.Message + "\n" + ex.StackTrace }; } finally { TcpClientServicePool.FreeService(tcp); } } else { ret.Data = new { Code = "Exception", Data = "获取TCP连接失败" }; } return(ret); }
public ActionResult GetCardInfo(string ip, int port) { //更新插卡信息 //更新卡的状态 var ret = new JsonResult(); try { string key = string.Format("card_info_{0}:{1}", ip, port); var info = MemoryCacheHelper.GetCacheItem <DeviceStatusSet>(key, () => { DeviceStatusSet set = new DeviceStatusSet(); //using (TcpClientService tcp = new TcpClientService(ip, port)) { //tcp.Connect(); var tcp = TcpClientServicePool.GetService(ip, port); if (tcp == null) { throw new Exception("null object"); } NMUCommService nmu = new NMUCommService(tcp); DeviceOverview deviceView = new DeviceOverview(); CardCommService cardService = null; deviceView.RefreshStatus(nmu); set.Overview = deviceView; NMUInfo numInfo = new NMUInfo(); NMUCommService nmuService = new NMUCommService(tcp); numInfo.RefreshStatus(nmuService); set.NMUInfo = numInfo; set.CardsInfo = new List <object>(); foreach (var e in deviceView.Slots) { if (e.IsInsert) { if (e.CardType == "EDFA") { cardService = new EDFACommService(tcp, e.SlotNumber); EDFAInfo edfaInfo = new EDFAInfo(); edfaInfo.RefreshData(cardService); e.CardInfo = edfaInfo; } else if (e.CardType == "OEO") { cardService = new OEOCommService(tcp, e.SlotNumber); OEOInfo oeoInfo = new OEOInfo(); oeoInfo.RefreshData(cardService); e.CardInfo = oeoInfo; } else if (e.CardType == "OLP") { cardService = new OLPCommService(tcp, e.SlotNumber); OLPInfo olpInfo = new OLPInfo(); olpInfo.RefreshData(cardService); e.CardInfo = olpInfo; } } } //tcp.Dispose(); TcpClientServicePool.FreeService(tcp); } return(set); }, null, DateTime.Now.AddSeconds(2)); ret.Data = new { Code = "", Data = info }; } catch (Exception ex) { ret.Data = new { Code = "Exception", Data = ex.Message + "\n" + ex.StackTrace }; } return(ret); }
private static void GetDeviceOverView(int id, out DeviceOverview deviceView, out DeviceInfo info, out List <CardSlotInfo> cardSlotInfo) { MachineFrame frame = null; MachineShelf shelf = null; MachineRoom room = null; using (var ctx = new GlsunViewEntities()) { frame = ctx.MachineFrame.Find(id); shelf = ctx.MachineShelf.Find(frame.MSID); room = ctx.MachineRoom.Find(shelf.MRID); } var tcp = TcpClientServicePool.GetService(frame.MFIP, frame.MFPort.Value); //设备整体状态信息 NMUCommService nmu = new NMUCommService(tcp); deviceView = new DeviceOverview(); deviceView.IP = frame.MFIP; deviceView.Port = frame.MFPort.Value; deviceView.MCUType = frame.MFMCUType; //主控卡信息 NMUInfo nmuInfo = new NMUInfo(); //设备信息 info = new DeviceInfo(); //卡槽信息 cardSlotInfo = new List <CardSlotInfo>(); if (tcp != null) { try { deviceView.RefreshStatus(nmu); nmuInfo.RefreshStatus(nmu); info = new DeviceInfo { Type = string.Format("{0}-{1}U-{2}", frame.MFName, deviceView.Unit, deviceView.Type), Shelf = string.Format("{0}-{1},第{2}层", shelf.MSName, shelf.MSNumber, frame.MSLayer), Room = room.MRName, Address = room.MRAddress, Description = room.MRDescription, SerialNumber = nmuInfo.Serial_Number, IP = frame.MFIP, Mask = nmuInfo.Subnet_Mask, MACAddr = deviceView.MACAddr }; cardSlotInfo = GetCardSlotInfo(tcp, deviceView); } catch (Exception ex) { deviceView.Type = "NoResponse"; deviceView.Unit = 4; } finally { TcpClientServicePool.FreeService(tcp); } } else { throw new TimeoutException("设备连接超时"); } if (deviceView.Slots == null) { deviceView.Slots = new List <Slot>(); } }
private static List <CardSlotInfo> GetCardSlotInfo(TcpClientService tcp, DeviceOverview deviceView) { List <CardSlotInfo> cardSlotInfo = new List <CardSlotInfo>(); var context = new GlsunViewEntities(); foreach (var e in deviceView.Slots) { CardSlotInfo slotInfo = new CardSlotInfo { Slot = e.SlotNumber, Status = e.IsInsert ? "在位" : "N/A", CardType = e.CardType }; //其他信息 switch (e.CardType) { case "EDFA": EDFACommService srvEDFA = new EDFACommService(tcp, e.SlotNumber); EDFAInfo edfaInfo = new EDFAInfo(); edfaInfo.RefreshData(srvEDFA); switch (edfaInfo.Work_Mode) { case 0: slotInfo.WorkMode = "其他"; break; case 1: slotInfo.WorkMode = "ACC模式"; break; case 2: slotInfo.WorkMode = "APC模式"; break; case 3: slotInfo.WorkMode = "AGC模式"; break; default: slotInfo.WorkMode = ""; break; } slotInfo.HardwareVersion = edfaInfo.Hardware_Version; slotInfo.SoftwareVersion = edfaInfo.Software_Version; var alarm = context.AlarmInformation .Where(a => a.DAddress == deviceView.IP && a.AISlot == slotInfo.Slot) .OrderByDescending(a => a.AITime).FirstOrDefault(); if (alarm != null) { slotInfo.CurrentAlarm = alarm.AIContent; } else { slotInfo.CurrentAlarm = ""; } break; case "OEO": OEOCommService srvOEO = new OEOCommService(tcp, e.SlotNumber); OEOInfo oeoInfo = new OEOInfo(); oeoInfo.RefreshData(srvOEO); slotInfo.HardwareVersion = oeoInfo.Hardware_Version; slotInfo.SoftwareVersion = oeoInfo.Software_Version; //SFP模块是否有转发 bool bTranspond = false; //SFP模块是否有环回 bool bLoopback = false; foreach (var spf in oeoInfo.SFPSet) { if (spf.Work_Mode == 1) { bTranspond = true; } if (spf.Work_Mode == 3) { bLoopback = true; } } if (bTranspond && bLoopback) { slotInfo.WorkMode = "转发+环回"; } else if (bTranspond) { slotInfo.WorkMode = "转发"; } else if (bLoopback) { slotInfo.WorkMode = "环回"; } else { slotInfo.WorkMode = "N/A"; } var alarmOEO = context.AlarmInformation .Where(a => a.DAddress == deviceView.IP && a.AISlot == slotInfo.Slot) .OrderByDescending(a => a.AITime).FirstOrDefault(); if (alarmOEO != null) { slotInfo.CurrentAlarm = alarmOEO.AIContent; } else { slotInfo.CurrentAlarm = ""; } break; case "OLP": OLPCommService srvOLP = new OLPCommService(tcp, e.SlotNumber); OLPInfo olpInfo = new OLPInfo(); olpInfo.RefreshData(srvOLP); slotInfo.HardwareVersion = olpInfo.Hardware_Version; slotInfo.SoftwareVersion = olpInfo.Software_Version; switch (olpInfo.Work_Mode) { case 0: slotInfo.WorkMode = "手动"; break; case 1: slotInfo.WorkMode = "自动"; break; default: break; } var alarmOLP = context.AlarmInformation .Where(a => a.DAddress == deviceView.IP && a.AISlot == slotInfo.Slot) .OrderByDescending(a => a.AITime).FirstOrDefault(); if (alarmOLP != null) { slotInfo.CurrentAlarm = alarmOLP.AIContent; } else { slotInfo.CurrentAlarm = ""; } break; default: slotInfo.CardType = "N/A"; slotInfo.HardwareVersion = "N/A"; slotInfo.SoftwareVersion = "N/A"; slotInfo.WorkMode = "N/A"; slotInfo.CurrentAlarm = "N/A"; break; } cardSlotInfo.Add(slotInfo); } context.Dispose(); return(cardSlotInfo); }