/** * Desconecta por Socket */ public override async Task OnDisconnected(WebSocket socket) { string socketId = WebSocketConnectionManager.GetId(socket); // Intenta desconectar admin o central if (socketId != null) { // Intentamos remover de ambos grupos.. en alguno tiene que existir WebSocketConnectionManager.RemoveFromGroup(socketId, ETipoConexion.Central.ToString()); WebSocketConnectionManager.RemoveFromGroup(socketId, ETipoConexion.Admin.ToString()); if (!AdminManager.Instance.DesconectarAdmin(socketId)) { CentralMonitoreo c = CentralMonitoreoManager.Instance.ObtenerCentral(socketId); if (c != null) { string centralId = c.CentralID; CentralMonitoreoManager.Instance.DesconectarCentral(socketId); // Mando a todos los admins la info nueva, para que se actualice al instante. await InvokeClientMethodToGroupAsync(ETipoConexion.Admin.ToString(), "ChangeCentralState", 0, centralId, (int)ECentralLogTipo.Desconectado); } } } try { await base.OnDisconnected(socket); } catch (WebSocketException) { } }
public static List <CentralLog> GetAll(string centralId) { List <CentralLog> logs = new List <CentralLog>(); using (MySqlConnection connection = new MySqlConnection(DbAccess.Instance.ConnectionString)) { MySqlCommand cmd = new MySqlCommand(); cmd.Connection = connection; cmd.CommandText = "SELECT * FROM central_log WHERE central_ID = @IdCentral ORDER BY fecha DESC LIMIT 20"; cmd.CommandType = System.Data.CommandType.Text; cmd.Parameters.AddWithValue("@IdCentral", centralId); connection.Open(); using (MySqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { int id = Convert.ToInt32(reader["central_log_ID"]); CentralLog log = new CentralLog(CentralMonitoreo.Get(reader["central_ID"].ToString()), CentralLogTipo.Get((ECentralLogTipo)Convert.ToInt32(reader["central_log_tipo_ID"]))); log.LogId = id; log.Fecha = Convert.ToDateTime(reader["fecha"]); // Agrego el log a la lista de retorno logs.Add(log); } } } return(logs); }
/* * Obtiene el log más reciente */ public static CentralLog GetLast(string centralId) { CentralLog log = null; using (MySqlConnection connection = new MySqlConnection(DbAccess.Instance.ConnectionString)) { MySqlCommand cmd = new MySqlCommand(); cmd.Connection = connection; cmd.CommandText = "SELECT * FROM central_log WHERE central_ID = @IdCentral ORDER BY fecha DESC LIMIT 1"; cmd.CommandType = System.Data.CommandType.Text; cmd.Parameters.AddWithValue("@IdCentral", centralId); connection.Open(); using (MySqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { log = new CentralLog(CentralMonitoreo.Get(reader["central_ID"].ToString()), CentralLogTipo.Get((ECentralLogTipo)Convert.ToInt32(reader["central_log_tipo_ID"]))); log.LogId = Convert.ToInt32(reader["central_log_ID"]); log.Fecha = Convert.ToDateTime(reader["fecha"]); } else { return(null); } } } return(log); }
/** * Devuelve el socketId de una central conectada. */ public string ObtenerSocketId(string centralId, string contraseña) { CentralMonitoreo c = CentralMonitoreo.Get(centralId); if (c == null || !c.Contraseña.Equals(contraseña)) { return(null); } // Si se puede identificar como central, devuelve el socketId si hay una conexión, o null si la central no está conectada KeyValuePair <string, CentralMonitoreo> conexion = centrales.Where(s => s.Value.CentralID == c.CentralID).FirstOrDefault(); return(conexion.Key); }
/** * Conecta una central y la agrega al diccionario. */ public bool ConectarCentral(string socketId, string centralId, string contraseña) { CentralMonitoreo c = CentralMonitoreo.Get(centralId); if (c == null || !c.Contraseña.Equals(contraseña)) { return(false); } CentralLog log = new CentralLog(c, CentralLogTipo.Get(ECentralLogTipo.Conectado)); log.Save(); centrales[socketId] = c; return(true); }
public IActionResult Get() { List <CentralMonitoreo> centrales = CentralMonitoreo.GetAll(); List <object> res = new List <object>(); foreach (CentralMonitoreo central in centrales) { CentralLog log = CentralLog.GetLast(central.CentralID); int estado = 0; if (log != null) { estado = log.TipoLog.TipoLogId.GetValueOrDefault(); } res.Add(new { Id = central.CentralID, Barrio = central.Barrio.Nombre, estado }); } return(Ok(res)); }
public CentralLog(CentralMonitoreo central, CentralLogTipo tipoLog) { Central = central; TipoLog = tipoLog; }