public override void Stop() { Logger.Info <ScvManager>($"Ending ScvManager for {Id}..."); Dispose(); Logger.Info <ScvManager>($"ScvManager for {Id} Ended..."); PS.Set(ProcessStates.Stopped); }
protected void StopManagers(bool forced = false) { Logger.Info <SactaProxy>("Deteniendo Gestores."); Managers.ForEach(depEntry => { if (forced) { if (depEntry.IsMain) { (depEntry.Manager as PsiManager).EventActivity -= OnPsiEventActivity; (depEntry.Manager as PsiManager).EventSectRequest -= OnPsiEventSectorizationAsk; } else { (depEntry.Manager as ScvManager).EventActivity -= OnScvEventActivity; (depEntry.Manager as ScvManager).EventSectorization -= OnScvEventSectorization; } } depEntry.Manager.Stop(); }); if (forced) { Managers.Clear(); } PS.Set(ProcessStates.Stopped); Logger.Info <SactaProxy>("Gestores Detenidos."); }
public override void Stop() { Logger.Info <PsiManager>($"Ending PsiManager..."); Dispose(); Logger.Info <PsiManager>($"PsiManager Ended..."); PS.Set(ProcessStates.Stopped); }
public override void Start() { Logger.Info <PsiManager>($"Starting PsiManager..."); try { Listener1 = new UdpSocket(Lan1Listen); /** Para seleccionar correctamente la Interfaz de salida de las tramas MCAST */ //Listener1.Base.MulticastLoopback = false; Listener1.Base.JoinMulticastGroup(IPAddress.Parse(Cfg.Comm.If1.McastGroup), IPAddress.Parse(Cfg.Comm.If1.Ip)); Listener1.Base.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 16); Listener1.NewDataEvent += OnDataReceived; Listener1.BeginReceive(); Listener2 = new UdpSocket(Lan2Listen); /** Para seleccionar correctamente la Interfaz de salida de las tramas MCAST */ //Listener2.Base.MulticastLoopback = false; Listener2.Base.JoinMulticastGroup(IPAddress.Parse(Cfg.Comm.If2.McastGroup), IPAddress.Parse(Cfg.Comm.If2.Ip)); Listener2.Base.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 16); Listener2.NewDataEvent += OnDataReceived; Listener2.BeginReceive(); TickTimer = new Timer(TimeSpan.FromSeconds(1).TotalMilliseconds); TickTimer.AutoReset = false; TickTimer.Elapsed += OnTick; TickTimer.Enabled = true; SendInitMsg(); Logger.Info <PsiManager>($"PsiManager. Waiting for SCV Activity on {Cfg.Comm.If1.Ip}:{Cfg.Comm.ListenPort} / {Cfg.Comm.If2.Ip}:{Cfg.Comm.ListenPort}"); Logger.Info <PsiManager>($"PsiManager. Sectores {Cfg.Sectorization.Sectors} Posiciones {Cfg.Sectorization.Positions}"); PS.Set(ProcessStates.Running); } catch (Exception x) { Logger.Exception <PsiManager>(x, $"On PSI"); Dispose(); PS.SignalFatal <PsiManager>($"Excepcion en el Arranque => {x}", History()); } }
protected void StartManagers() { /** Chequear que no haya sectores o posiciones repetidas */ var duplicatedSec = Cfg.Psi.Sectorization.SectorsList().GroupBy(s => s) .Where(g => g.Count() > 1).Select(g => g.Key.ToString()).ToList(); var duplicatedPos = Cfg.Psi.Sectorization.PositionsList().GroupBy(s => s) .Where(g => g.Count() > 1).Select(g => g.Key.ToString()).ToList(); var duplicatedVir = Cfg.Psi.Sectorization.VirtualsList().GroupBy(s => s) .Where(g => g.Count() > 1).Select(g => g.Key.ToString()).ToList(); TestDuplicated(duplicatedPos, duplicatedSec, duplicatedVir, () => { Logger.Info <SactaProxy>($"Arrancando Gestores. ProtocolVersion => {Cfg.ProtocolVersion}, InCluster => {Cfg.InCluster}"); // Solo arrancan los gestores cuando no hay duplicados. Managers.ForEach(dependency => { dependency.Manager.Start(); }); PS.Set(ProcessStates.Running); Logger.Info <SactaProxy>("Gestores Arrancados."); }); }
public override void Start() { Logger.Info <ScvManager>($"Starting ScvManager for {Id}..."); try { Listener1 = new UdpSocket(Lan1Listen); /** Para seleccionar correctamente la Interfaz de salida de las tramas MCAST */ Listener1.Base.MulticastLoopback = false; Listener1.Base.JoinMulticastGroup(IPAddress.Parse(Cfg.Comm.If1.McastGroup), IPAddress.Parse(Cfg.Comm.If1.Ip)); /** 20180731. Para poder pasar por una red de ROUTERS */ Listener1.Base.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 16); Listener1.NewDataEvent += OnDataReceived; if (Version == 0) { Listener2 = new UdpSocket(Lan2Listen); /** Para seleccionar correctamente la Interfaz de salida de las tramas MCAST */ Listener2.Base.MulticastLoopback = false; Listener2.Base.JoinMulticastGroup(IPAddress.Parse(Cfg.Comm.If2.McastGroup), IPAddress.Parse(Cfg.Comm.If2.Ip)); /** 20180731. Para poder pasar por una red de ROUTERS */ Listener2.Base.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 16); Listener2.NewDataEvent += OnDataReceived; } else { Listener2 = null; Listener1.Base.JoinMulticastGroup(IPAddress.Parse(Cfg.Comm.If2.McastGroup), IPAddress.Parse(Cfg.Comm.If1.Ip)); } Listener1.BeginReceive(); if (Version == 0) { Listener2.BeginReceive(); } TickTimer = new Timer(TimeSpan.FromSeconds(1).TotalMilliseconds); TickTimer.AutoReset = false; TickTimer.Elapsed += OnTick; TickTimer.Enabled = true; GlobalState = SactaState.WaitingSactaActivity; if (Version == 0) { Logger.Info <ScvManager>($"ScvManager for {Id}. Waiting for Sacta Activity on {Cfg.Comm.If1.Ip}:{Cfg.Comm.ListenPort}, {Cfg.Comm.If2.Ip}:{Cfg.Comm.ListenPort} ..."); } else { Logger.Info <ScvManager>($"ScvManager for {Id}. Waiting for Sacta Activity on {Cfg.Comm.If1.Ip}:{Cfg.Comm.ListenPort} ..."); } Logger.Info <PsiManager>($"ScvManager for {Id}. Sectores {Cfg.Sectorization.Sectors} Posiciones {Cfg.Sectorization.Positions}"); PS.Set(ProcessStates.Running); } catch (Exception x) { Logger.Exception <ScvManager>(x, $"On {Cfg.Id}"); Dispose(); PS.SignalFatal <ScvManager>($"Excepcion en el Arranque {x}", History()); } }