Beispiel #1
0
        /// <summary>
        /// Procesamiento de un pedido desde LENEL. En todos los casos, el pedido es reconocido, luego se envia una
        /// respuesta o muchasy se hace FLUSH.
        /// Inmediatamente despues de esta salida se DESCONECTARA al cliente.
        /// </summary>
        /// <param name="netStream"></param>
        /// <param name="v_buffer"></param>
        private void ProcesarPedidoLenel(NetworkStream netStream, byte[] v_buffer)
        {
            Match matchHeader;
            string texto = Encoding.Default.GetString(v_buffer).Replace("\0", "");

            matchHeader = LNL_AddDevice.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    loguearString("Comando reconocido: " + texto);

                    string deviceID = getMatchData(matchHeader, 1);
                    string deviceName = getMatchData(matchHeader, 2);
                    string organizationID = getMatchData(matchHeader, 3);

                    loguearString("LNL_AddDevice: DeviceID: " + deviceID + " DeviceName: " + deviceName);

                    AgregarDeviceDesdeLenel(deviceID, deviceName, organizationID);

                    //string respuesta = "Agregado satisfactoriamente";
                    //respuesta = respuesta + "\n";
                    //netStream.Write(Encoding.Default.GetBytes(respuesta), 0, respuesta.Length);
                    //netStream.Flush();
                }
                catch (Exception e) { loguearString("Excepcion en LNL_AddDevice: " + e.Message); }
                return;
            }

            matchHeader = LNL_GetEventData.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    string LENELPanelID = getMatchData(matchHeader, 1);
                    string serialNum = getMatchData(matchHeader, 2);

                    loguearString("LNL_GetEventData: PanelID: " + LENELPanelID + " Serial: " + serialNum);

                    string EventData = ObtenerDatosEvento(LENELPanelID, serialNum);

                    byte[] datosFotoEmp = null;
                    byte[] datosFotoEv = null;
                    byte[] datosMapa = null;

                    bool esValido = true;

                    if (EventData != "FALSE")
                    {
                        //Expresion regular para extraer datos del EventData obtenido de la base
                        matchHeader = LNL_DatosEvento.Match(EventData);
                        if (matchHeader.Success)
                        {
                            string ImagenEmpleado = getMatchData(matchHeader, 11);
                            string ImagenAcceso = getMatchData(matchHeader, 12);
                            string Latitud = getMatchData(matchHeader, 9);
                            string Longitud = getMatchData(matchHeader, 10);
                            string Nombre = getMatchData(matchHeader, 2);

                            datosFotoEmp = obtenerFotoEmp(ImagenEmpleado);
                            datosFotoEv = obtenerFotoEv(ImagenAcceso);
                            datosMapa = obtenerMapaEv(Latitud, Longitud, "16");

                            if (Nombre == "INVALIDO")
                            {
                                esValido = false;
                            }

                        }
                    }

                   enviarBulkData(Encoding.Default.GetBytes(EventData), datosFotoEmp, datosFotoEv, datosMapa,esValido);

                }
                catch (Exception e) { loguearString("Excepcion en LNL_GetEventData: " + e.Message); }
                return;
            }

            matchHeader = LNL_GetPosition.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    loguearString("Comando reconocido: " + texto);
                    string LNLPanelID = getMatchData(matchHeader, 1);
                    string organizationID = getMatchData(matchHeader, 2);
                    string includeMap = getMatchData(matchHeader, 3);

                    loguearString("LNL_GetPosition:  PanelID:" + LNLPanelID + " ConMapa: " + includeMap);

                    string encodedGPSPosition = mainApp.DataManager.obtenerUltimaPosicionGPS(LNLPanelID, organizationID);

                    enviarPosicionGPS(encodedGPSPosition);
                    if (encodedGPSPosition != dataManager.NO_LOCATION_DATA)     // Solo envia el mapa si envio una posicion valida...
                    {
                        if (includeMap == "T")
                        {
                            enviarMapaAcceso(@"[LAT]", @"[LONG]", "16");        // El reemplazo de las coordenadas se realiza en el LENEL
                        }
                    }
                }
                catch (Exception e) { loguearString("Excepcion en LNL_GetPosition: " + e.Message); }
                return;
            }

            matchHeader = LNL_GetAcceso.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    string deviceID = getMatchData(matchHeader, 1);
                    string deviceName = getMatchData(matchHeader, 2);
                    string organizationID = getMatchData(matchHeader, 3);
                    string serialNum = getMatchData(matchHeader, 4);

                    //loguearString("LNL_GetAcceso:  DeviceName:" + deviceName + " serial: " + serialNum);

                    int idAcceso = 0;
                    string fuente = "";
                    string accessToSend = "";

                    if (mainApp.ComunicationSystem.socketServerGeneral.isHandHeldOnLine(deviceName))
                    {
                        accessToSend = ObtenerAccesoSinSerialNum(deviceName, organizationID, serialNum, ref idAcceso, ref fuente);
                    }
                    else
                    {
                        accessToSend = "FAIL";
                    }

                    if (accessToSend != "")
                    {
                        if (accessToSend != "FAIL")
                        {
                            loguearString("Asignado SERIALNUM: " + serialNum + " a acceso " + idAcceso.ToString() + " de " + deviceName + ".Enviando a LENEL");
                        }
                        ///Envia al Lenel Translator, el string con los datos para que se agregue el acceso en el AlarmMonitoring
                        netStream.Write(Encoding.Default.GetBytes(accessToSend), 0, accessToSend.Length);
                        netStream.Flush();

                        if (esperarConfirmacion(netStream))  // Not implementado: always true
                        {
                            if (fuente == "A")
                            {
                                ActualizarSerialNumEnAccesos(idAcceso, serialNum);
                            }
                            if (fuente == "V")
                            {
                                ActualizarSerialNumEnVisitas(idAcceso, serialNum);
                            }
                        }
                    }
                    else
                    {
                        string noData = "";
                        netStream.Write(Encoding.Default.GetBytes(noData), 0, noData.Length);
                    }
                }
                catch (Exception e) { loguearString("Excepcion en LNL_GetAcceso: " + e.Message); }

                return;
            }

            matchHeader = LNL_AddReaderToPanel.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    loguearString("Comando reconocido: " + texto);
                    string deviceID = getMatchData(matchHeader, 1);
                    string deviceName = getMatchData(matchHeader, 2);
                    string readerID = getMatchData(matchHeader, 3);
                    string readerName = getMatchData(matchHeader, 4);
                    string readerEntranceType = getMatchData(matchHeader, 5);       //0: Indefinido, 1: Entrada, 2: Salida
                    string organizationID = getMatchData(matchHeader, 6);

                    loguearString("LNL_AddReaderToPanel. Panel: " + deviceID + " ReaderID: " + readerID + " Tipo: " + readerEntranceType);

                    AgregarReaderLenel(deviceID, deviceName, readerID, readerName, readerEntranceType, organizationID);
                }
                catch (Exception e) { loguearString("Excepcion en LNL_AddReaderToPanel: " + e.Message); }
                return;
            }

            matchHeader = LNL_DelEmployee.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    string badge = getMatchData(matchHeader, 1);
                    string LNLpanelID = getMatchData(matchHeader, 2);
                    string LNLOrgID = getMatchData(matchHeader, 3);

                    loguearString("LNL_DelEmployee. Panel: " + LNLpanelID + " badge: " + badge);

                    int orgID = int.Parse(LNLOrgID);

                    // Desasocia el empleado de la tarjeta de manera de sacarlo de la lista
                    // de empleados que se enviara al HH
                    mainApp.DataManager.borrarEmpleado(badge);

                    string HHID = mainApp.DataManager.ObtenerHHID(LNLpanelID);

                    if (HHID != "")
                    {
                        // DESCOMENTAR LA SIGUIENTE LINEA PARA BORRAR EMPLEADOS EN VEZ DE MANDAR LA LISTA
                       ComunicationLayer.enviarBorrarEmpleado(badge, HHID);

                        //enviarPedidoListaEmpleados(HHID);       // Ok, enviar la nueva lista de empleados. INCLUYE el envio de AccessLevels
                        //enviarAccessLevelsDefinitions(HHID, orgID);
                    }
                }
                catch (Exception e) { loguearString("Excepcion en LNL_DelEmployee: " + e.Message); }
                return;
            }

            matchHeader = LNL_AddAccessLevel.Match(texto);
            if (matchHeader.Success)
            {
                try
                {

                    int LNLpanelID = int.Parse(getMatchData(matchHeader, 1));
                    int orgID = int.Parse(getMatchData(matchHeader, 2));
                    int accessLevelID = int.Parse(getMatchData(matchHeader, 3));
                    string TZReaderData = getMatchData(matchHeader, 4);
                    string isDownloadingDB = getMatchData(matchHeader, 5);

                    loguearString("LNL_AddAccessLevel. Panel: " + LNLpanelID + " AccessLevelID:" + accessLevelID.ToString() + " ReadersTZ: " + TZReaderData);

                    // Actualizar la info en el panel
                    string HHID = mainApp.DataManager.ObtenerHHID(LNLpanelID.ToString());

                    string oldAllPersonIDs = mainApp.DataManager.loadAllPersonID(HHID);

                    AccessLevelLogic.addAccessLevel(orgID, LNLpanelID, accessLevelID, TZReaderData);

                    if (HHID != "")                     // Envío final de la nueva lista de empleados y las definiciones de los accessLevels
                    {
                        if (isDownloadingDB != "1")     // Si no esta haciendo DownloadDB
                        {

                            string newAllPersonIDs = mainApp.DataManager.loadAllPersonID(HHID);
                            ComunicationLayer.enviarListaEmpleadosDiferencia(HHID, oldAllPersonIDs, newAllPersonIDs);
                            ComunicationLayer.enviarAccessLevelsDefinitions(HHID, orgID, isDownloadingDB);      // Incluye un envio del ALLPersonIDs al final
                        }
                    }
                }
                catch (Exception e) { loguearString("Excepcion en LNL_AddAccessLevel: " + e.Message); }
                return;
            }

            matchHeader = LNL_SendEmployeeList.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    int LNLpanelID = int.Parse(getMatchData(matchHeader, 1));
                    int orgID = int.Parse(getMatchData(matchHeader, 2));

                    // Actualizar la info en el panel
                    string HHID = mainApp.DataManager.ObtenerHHID(LNLpanelID.ToString());

                    if (HHID != "")                 // Evia efectivamente la lista de empleados.
                    {
                        ComunicationLayer.enviarPedidoListaEmpleados(HHID);           // Actualizo la lista de empleados y el accesslevel del HH,INCLUYE el envio de AccessLevels
                        //enviarAccessLevelsDefinitions(HHID, orgID);
                    }
                }
                catch (Exception e) { loguearString("Excepcion en LNL_SendEmployeeList: " + e.Message); }
                return;
            }
            matchHeader = LNL_AddTimeZone.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    int LNL_PanelID = int.Parse(getMatchData(matchHeader, 1));
                    int organizationID = int.Parse(getMatchData(matchHeader, 2));
                    int TZNumber = int.Parse(getMatchData(matchHeader, 3));
                    string intervalData = getMatchData(matchHeader, 4);
                    string isDownloadingDB = getMatchData(matchHeader, 5);

                    loguearString("LNL_AddTimeZone. Panel: " + LNL_PanelID + " TZNumber:" + TZNumber.ToString() + " Interval: " + intervalData);

                    //Agrego la nueva Time zone a Estructura en memoria y a la BD.
                    AccessLevelLogic.addTimezone(organizationID, TZNumber, intervalData);

                    // Actualizar la info en el panel
                    string HHID = mainApp.DataManager.ObtenerHHID(LNL_PanelID.ToString());

                    if (HHID != "")                 // Envío final de la nueva lista de empleados y las definiciones de los accessLevels
                    {
                        if (isDownloadingDB != "1")
                        {
                            ComunicationLayer.enviarAccessLevelsDefinitions(HHID, organizationID,isDownloadingDB);
                        }
                    }
                }
                catch (Exception e) { loguearString("Excepcion en LNL_AddTimeZone: " + e.Message); }
                return;
            }

            matchHeader = LNL_AddHolidays.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    string LNLpanelID = getMatchData(matchHeader, 1);
                    string idOrganization = getMatchData(matchHeader, 2);
                    string holidaysData = getMatchData(matchHeader, 3);
                    string isDownloadingDB = getMatchData(matchHeader, 4);

                    int orgID = int.Parse(idOrganization);

                    loguearString("LNL_AddHolidays. Panel: " + LNLpanelID + " datos:" + holidaysData);

                     AccessLevelLogic.addLenelHolidays(idOrganization, holidaysData);        // NOTA: En una sola llamada se definen TODAS las holidays para cada HH
                    // Actualizar la info en el panel
                    string HHID = mainApp.DataManager.ObtenerHHID(LNLpanelID);

                    if (HHID != "")                                      // Envío final de la nueva lista de empleados y las definiciones de los accessLevels
                    {
                        if (isDownloadingDB != "1")
                        {
                            ComunicationLayer.enviarAccessLevelsDefinitions(HHID, orgID,isDownloadingDB);
                        }
                    }
                }
                catch (Exception e) { loguearString("Excepcion en LNL_AddHolidays: " + e.Message); }
                return;
            }

            // Cambio en una badge de LENEL
            matchHeader = LNL_AddEmployee.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    int LNL_PanelID = int.Parse(getMatchData(matchHeader, 1));
                    string name = getMatchData(matchHeader, 2);
                    string lastName = getMatchData(matchHeader, 3);
                    string badge = getMatchData(matchHeader, 4);
                    string empresa = getMatchData(matchHeader, 5);
                    string SSNO = getMatchData(matchHeader, 6);
                    string accessLevels = getMatchData(matchHeader, 7);         // Lista de accessLevels asociados a la badge.
                    string tieneFoto = getMatchData(matchHeader, 8);
                    string LNLOrgID = getMatchData(matchHeader, 9);
                    string isDownloadingDB = getMatchData(matchHeader, 10);

                    string personID = getMatchData(matchHeader, 11);

                    string idEventoEmp = getMatchData(matchHeader, 12);
                    string lastChangedLNL = getMatchData(matchHeader, 13);

                    string lastChanged = convertirFormatoHoraLNL(lastChangedLNL);

                    string HHID = mainApp.DataManager.ObtenerHHID(LNL_PanelID.ToString());

                    int OrgID = int.Parse(LNLOrgID);
                    string imageFileName = "";
                    empresa = "";

                    loguearString("LNL_AddEmployee: " + name + " " + lastName + " PANELID: " + LNL_PanelID.ToString());
                    bool aumentarVersion = false;

                    if (tieneFoto == "T")                   // Recibe la foto del empleado
                    {
                        try
                        {

                            byte[] imageBytes = obtenerBufferconIDEvento(idEventoEmp, servidorDatos);

                            if (imageBytes!=null)
                            {
                                int bytesFoto = imageBytes.Length;

                                string pathImagenDB = mainApp.DataManager.cargarPathImagen(personID);
                                // Si no hay imagen en la DB y ahora llegó una imagen, aumento la version del empleado
                                if (pathImagenDB.Equals(string.Empty)) aumentarVersion = true;// mainApp.DataManager.aumentarIdImagen(personID);//aumentarVersionEmpleado(personID);
                                else  // Si hay imagen verifico que tenga el mismo largo
                                {
                                    byte[] imgDB = obtenerFotoEmp(pathImagenDB);
                                    if (imgDB != null)
                                    {
                                        if (bytesFoto != imgDB.Length) aumentarVersion = true; // mainApp.DataManager.aumentarIdImagen(personID);//mainApp.DataManager.aumentarVersionEmpleado(personID);
                                    }
                                }
                                imageFileName = LNL_PanelID.ToString() + "_" + personID + ".jpg";

                                //imageFileName = LNL_PanelID.ToString() + "_" + badge + "_" + DateTime.Now.Year.ToString() + "_" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Day.ToString() + "_" + DateTime.Now.Hour.ToString() + "_" + DateTime.Now.Minute.ToString() + "_" + DateTime.Now.Second.ToString() + ".jpg";
                                string imagePath = SystemConfiguration.ImagesPath;
                                File.WriteAllBytes(imagePath + @"\" + imageFileName, imageBytes);

                            }
                        }
                        catch (Exception)
                        {
                            imageFileName = "";     // Excepcion: no recibe foto.
                        }
                    }

                    int idNuevoEmpleado = mainApp.DataManager.addEmpleadoDesdeLenel(name, lastName, empresa, SSNO, @"~/Imagenes/" + imageFileName, OrgID, personID, isDownloadingDB, lastChanged);
                    mainApp.DataManager.asociarEmpleadoATarjeta(badge, idNuevoEmpleado, OrgID);

                    if (aumentarVersion)
                    {
                        mainApp.DataManager.aumentarIdImagen(personID);
                    }

                    if (!AccessLevelLogic.ListaBadgeAccessLevels.ContainsKey(OrgID))
                    {
                        LENELBadgeAccessLevels nuevoLBACC = new LENELBadgeAccessLevels(OrgID);
                        AccessLevelLogic.ListaBadgeAccessLevels.Add(OrgID, nuevoLBACC);
                    }

                    LENELBadgeAccessLevels LBACC = AccessLevelLogic.ListaBadgeAccessLevels[OrgID];

                    if (LBACC.asociarAccessLevel(badge, accessLevels))          // Si cambiaron los access levels asociados a la tarjeta
                        mainApp.DataManager.aumentarVersionEmpleado(personID);  // aumento la versión del empleado

                    // Alta en la BD
                    mainApp.DataManager.updateLenelBadgeAccessLevels(OrgID, badge, accessLevels);

                    if (HHID != "")                 // Envio final del add o delete Empleado al HH. Puede ser un DELETE porque Lenel manda un addEmployee al QUITAR un accesslevel de una tarjeta
                    {
                        if (isDownloadingDB != "1")             // Si esta llamada no es debida al DownloadDatabase, entonces enviar la lista al HH
                        {
                            try
                            {
                                string accesslevel = AccessLevelLogic.getAccessLevelsByBadgeInHH(badge, HHID);
                                if (accesslevel.Trim().Length > 0)
                                {
                                    ComunicationLayer.enviarAgregarUnEmpleado(badge, HHID);
                                }
                                else
                                {
                                    ComunicationLayer.enviarBorrarEmpleado(badge, HHID);
                                }
                            }
                            catch (Exception e) { loguearString("ERROR!! No se pudo agregar el empleado: " + e.Message); }

                            //enviarPedidoListaEmpleados(HHID);                           // Actualizo la lista de empleados y el accesslevel del HH, INCLUYE el envio de AccessLevels
                            //enviarAccessLevelsDefinitions(HHID, OrgID);
                        }
                    }

                }
                catch (Exception e) { loguearString("Excepcion en LNL_AddEmployee: " + e.Message); }
                return;
            }

             matchHeader = LNL_GetZoneMap.Match(texto);
             if (matchHeader.Success)
             {
                 try
                 {
                     int LNL_PanelID = int.Parse(getMatchData(matchHeader, 1));
                     string idOrganization = getMatchData(matchHeader, 2);
                     loguearString("Enviando el mapa de definicion de ZONAS para el panel " + LNL_PanelID.ToString());

                     string nombreZona = mainApp.DataManager.ObtenerHHID(LNL_PanelID.ToString());
                     // Envia el HTML con el mapa que contiene el javascript de definicion de zonas y ademas envia los datos de la zona actual
                     enviarDatosZona(nombreZona,ObtenerMapaZonas(), obtenerDatosZona(LNL_PanelID, int.Parse(idOrganization)));
                 }
                 catch (Exception e) { loguearString("Excepcion en LNL_GetZoneMap: " + e.Message); }
                 return;
             }

             matchHeader = LNL_GetOnlyZone.Match(texto);
             if (matchHeader.Success)
             {
                 try
                 {
                     int LNL_PanelID = int.Parse(getMatchData(matchHeader, 1));
                     string idOrganization = getMatchData(matchHeader, 2);
                     loguearString("Enviando datos de la zona: " + LNL_PanelID.ToString());

                     string nombreZona = mainApp.DataManager.ObtenerHHID(LNL_PanelID.ToString());
                     // Envia el HTML con el mapa que contiene el javascript de definicion de zonas y ademas envia los datos de la zona actual
                     enviarDatosSoloZona(nombreZona,obtenerDatosZona(LNL_PanelID, int.Parse(idOrganization)));
                 }
                 catch (Exception e) { loguearString("Excepcion en LNL_GetOnlyZone: " + e.Message); }
                 return;
             }

             matchHeader = LNL_DefineZone.Match(texto);
             if (matchHeader.Success)
             {
                 try
                 {
                     int LNL_PanelID = int.Parse(getMatchData(matchHeader, 1));
                     int idOrganization = int.Parse(getMatchData(matchHeader, 2));
                     string listaPuntos = getMatchData(matchHeader, 3);

                     loguearString("Actualizando definicion de zona de panelID: " + LNL_PanelID.ToString() + "con: " + listaPuntos);
                     // Le saco la ultima coma del final
                     listaPuntos = listaPuntos.Substring(0, listaPuntos.Length - 1);

                     mainApp.DataManager.DefineNewZone(LNL_PanelID, listaPuntos, idOrganization);

                 }
                 catch (Exception e) { loguearString("Excepcion en LNL_DefineZone: " + e.Message); }
                 return;
             }
             matchHeader = LNL_DefineGate.Match(texto);
             if (matchHeader.Success)
             {
                 try
                 {
                        //("TYPE:LNL_DEFINEGATE,DEVICEID:(.*),READERID:(.*),ORGANIZATION:(.*),ACCESSTYPE:(.*),ORD1:(.*),ORD2:(.*)");
                     int LNL_PanelID = int.Parse(getMatchData(matchHeader, 1));
                     int LNL_ReaderID = int.Parse(getMatchData(matchHeader, 2));
                     int idOrganization = int.Parse(getMatchData(matchHeader, 3));
                     string accessType = getMatchData(matchHeader, 4);
                     int Punto1=int.Parse(getMatchData(matchHeader, 5));
                     int Punto2= int.Parse(getMatchData(matchHeader, 6));
                     loguearString("Actualizando la Virtual Gate del LNLPanelID: " + LNL_PanelID.ToString() + ", ReaderID: " + LNL_ReaderID.ToString());

                     mainApp.DataManager.defineGate(LNL_PanelID,LNL_ReaderID,idOrganization,accessType,Punto1,Punto2);

                 }
                 catch (Exception e) { loguearString("Excepcion en LNL_DefineGate: " + e.Message); }

                 return;
             }

            matchHeader = LNL_AddVirtualZoneFromLenel.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    int LNL_PanelID = int.Parse(getMatchData(matchHeader, 1));
                    string LNL_Panelname = getMatchData(matchHeader, 2);
                    int idOrganization = int.Parse(getMatchData(matchHeader, 3));

                    loguearString("LNL_AddZONE: PanelID: " + LNL_PanelID.ToString() + " ZoneName: " + LNL_Panelname + "OrgID: " + idOrganization.ToString());

                    mainApp.DataManager.addZoneFromLenel(LNL_PanelID, LNL_Panelname, idOrganization);
                }
                catch (Exception e) { loguearString("Excepcion en LNL_AddVirtualZoneFromLenel: " + e.Message); }
                return;
            }

            //Regex(@"TYPE:LNL_ADDVIRTUALGATE,DEVICEID:(.*),DEVICENAME:(.*),READERID:(.*),READERNAME:(.*),READERENTRANCETYPE:(.*),ORGANIZATION:(.*)");
            matchHeader = LNL_AddVirtualGateFromLenel.Match(texto);
            if (matchHeader.Success)
            {
                try
                {
                    int LNL_PanelID = int.Parse(getMatchData(matchHeader, 1));
                    string LNL_Panelname = getMatchData(matchHeader, 2);            // No se usa
                    int LNL_ReaderID = int.Parse(getMatchData(matchHeader, 3));
                    string LNL_ReaderName = getMatchData(matchHeader, 4);
                    string LNL_ReaderEntranceType = getMatchData(matchHeader, 5);   // No se usa
                    int idOrganization = int.Parse(getMatchData(matchHeader, 3));

                    mainApp.DataManager.addVirtualGateFromLenel(LNL_PanelID, LNL_ReaderID, LNL_ReaderName, idOrganization);
                }
                catch (Exception e) { loguearString("Excepcion en LNL_AddVirtualGateFomLenel: " + e.Message); }
                return;
            }

            matchHeader = LNL_CleanupDB.Match(texto);
            if (matchHeader.Success)
            {
                int idOrganization = int.Parse(getMatchData(matchHeader, 1));
                string finishPanels = getMatchData(matchHeader, 2);             // Lista de panels a enviar la lista de empelados nueva.
                string first = getMatchData(matchHeader, 3);                    // Si vale 1, entonces es la primera vez que se manda desde el constructor del translator
                                                                                // SOLO entonces proceder al borrado de empleados de la base.

                if (first == "1")
                {
                    loguearString("Borrando lista de empleados no actualizados de la organizacion: " + idOrganization.ToString());
                    mainApp.DataManager.borrarListaPreviaEmpleados(idOrganization);
                }

                string [] idPanels = finishPanels.Split(',');
                for (int i =0 ; i<idPanels.Length;i++)
                {

                    string HHID = mainApp.DataManager.ObtenerHHID(idPanels[i]);
                    if (HHID != "")                 // Evia efectivamente la lista de empleados.
                    {
                       ComunicationLayer.enviarPedidoListaEmpleados(HHID);           // Actualizo la lista de empleados y el accesslevel del HH,INCLUYE el envio de AccessLevels
                    }

                }

                return;
            }

            matchHeader = LNL_GetConnectionStatus.Match(texto); // Devuelve true o False si el HH correspondiente al PANELID esta conectado
            if (matchHeader.Success)
            {

                string LNL_PanelID = getMatchData(matchHeader, 1);
                int idOrganization = int.Parse(getMatchData(matchHeader, 2));
                try
                {
                    string HHID = mainApp.DataManager.ObtenerHHID(LNL_PanelID);
                    bool res = mainApp.ComunicationSystem.socketServerGeneral.isHandHeldOnLine(HHID);

                    string resToSend = (res) ? "YES":"NO";

                    //resToSend = "YES";

                    netStream.Write(Encoding.Default.GetBytes(resToSend), 0, resToSend.Length);
                    netStream.Flush();

                    //loguearString("Connection Status de " + HHID + ": " + resToSend);
                }
                catch (Exception ex)
                {
                    loguearString("Excepcion en LNL_GetConnectionStatus: " + ex.Message);
                }
                return;
            }

            // Si llega aca es porque no pudo machear ninguna expresion regular
            loguearString("ATENCION: COMANDO NO RECONOCIDO: " + texto);
        }
Beispiel #2
0
        // Lista de asociaciones de tarjetas a accesslevels para todas las organizaciones
        public Dictionary<int, LENELBadgeAccessLevels> LoadListaBadgeAccessLevels()
        {
            Dictionary<int, LENELBadgeAccessLevels> listaResultado = new Dictionary<int, LENELBadgeAccessLevels>();

            SqlConnection cnn = new SqlConnection(conexion);
            try
            {
                cnn.Open();
                SqlCommand cmd = cnn.CreateCommand();

                cmd.CommandText = "select * from Tarjetas";
                cmd.CommandType = CommandType.Text;
                SqlDataReader lector = cmd.ExecuteReader();
                while (lector.Read())
                {
                    int idOrg = int.Parse(lector["idOrganizacion"].ToString());

                    if (!listaResultado.ContainsKey(idOrg))
                    {
                        LENELBadgeAccessLevels nuevoAccessLevels = new LENELBadgeAccessLevels(idOrg);
                        listaResultado.Add(idOrg, nuevoAccessLevels);
                    }

                    LENELBadgeAccessLevels accessLevels = listaResultado[idOrg];

                    long idTarjeta = long.Parse(lector["Tarjeta"].ToString());
                    string listaAccessLevels = lector["accessLevels"].ToString();

                    accessLevels.asociarAccessLevel(idTarjeta.ToString(), listaAccessLevels);
                }
                lector.Close();
            }
            catch (Exception ex)
            {
                loguearString("Excepcion en LoadListaBadgeAccessLevels: " + ex.Message, TiposLOG.HH);
            }
            finally
            {
                cnn.Close();
            }

            return listaResultado;
        }