Exemple #1
0
        /**
         * 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);
        }
Exemple #4
0
        /**
         * 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);
        }
Exemple #5
0
        /**
         * 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;
 }