public async void ReintentarInterrogacion(object state) { CentralReintento reintento = (CentralReintento)state; reintento.SiguienteReintento(); // Chequeamos que siga existiendo if (CentralMonitoreoManager.Instance.ExisteCentral(reintento.SocketID)) { // Si se puede reintentar if (reintento.Reintentos < config.Reintentos) { await MessagesHandler.Instance.InvokeClientMethodOnlyAsync(reintento.SocketID, "intSecuencial", reintento.Reintentos); } // Si llegó al límite de reintentos else { // Destruyo el timer if (centralesSinRespuesta.TryGetValue(reintento.SocketID, out Timer timer)) { timer.Dispose(); centralesSinRespuesta.Remove(reintento.SocketID); } // Logeo la pérdida de conexión... CentralLog log = new CentralLog(CentralMonitoreoManager.Instance.ObtenerCentral(reintento.SocketID), CentralLogTipo.Get(ECentralLogTipo.PerdidaConexion)); log.Save(); // Me desconecto de la central... await MessagesHandler.Instance.OnDisconnected(reintento.SocketID); } } }
private async void InterrogarCentrales(object state) { List <string> conexiones = MessagesHandler.Instance.ObtenerSocketIdCentrales(); if (conexiones == default(List <string>)) { return; } // Manda el mensaje a todas las centrales foreach (string socketId in conexiones) { // Si justo se desconectó una de las centrales, la saltea if (CentralMonitoreoManager.Instance.ExisteCentral(socketId)) { CentralReintento reintento = new CentralReintento(socketId); Timer timer = new Timer(ReintentarInterrogacion, reintento, config.TimeOut, config.TimeOut); centralesSinRespuesta[socketId] = timer; await MessagesHandler.Instance.InvokeClientMethodOnlyAsync(socketId, "intSecuencial", 0); } } }