static int _refCount = 0; // Contador de referencias usadas por los translators. Si llega a cero se detiene el thread y se libera la referencia #region Singleton public static PoolGetAcceso GetInstance() { if (_instance == null) { _instance = new PoolGetAcceso(); } return(_instance); }
public void subRefCount() { _refCount--; Helpers.GetInstance().DoLog("Resto refCount de PoolGetAcceso =" + _refCount); Thread.Sleep(100); if (_refCount == 0) { Stop(); // Detiene el thread de verificacion Thread.Sleep(500); _instance = null; // Hace null la referencia para que un nuevo GetInstance lance todo de nuevo Helpers.GetInstance().DoLog("Instance de PoolGetAcceso es NULL"); } }
/// <summary> /// Mensaje para notificar la dada de baja de Panel. /// Solo se envia deletePanel si realmente se dio de baja y no existe en Lenel- /// Ademas usa DC para eliminar el usuario asociado al panel. /// </summary> public void deletePanel(int PanelID, string panelName) { PoolGetConnStatus.GetInstance().subRefCount(); // Para detener el thread y liberar memoria en caso de ser el ultimo panel que se da de baja. PoolGetAlarm.GetInstance().subRefCount(); PoolGetAcceso.GetInstance().subRefCount(); PoolSetAlarma.GetInstance().subRefCount(); PoolSetAcceso.GetInstance().subRefCount(); System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); string orgID = Helpers.GetInstance().MainOrgID.ToString(); // El configurado en el registro try { //Helpers.GetInstance().mutexTCP_ACCESS.WaitOne(); try { string errDesc = ""; int errCode = -1; if (!WebServiceAPI.GetInstance().ExistePanelEnOnGuard(PanelID.ToString(), out errDesc, out errCode)) { WebServiceAPI.GetInstance().DeleteDevice(PanelID.ToString(), orgID, out errDesc, out errCode); if (errCode == (int)StatusCode.OK) { Employee emp = WebServiceAPI.GetInstance().ObtenerEmpleadoAsociadoAHH(panelName, out errDesc, out errCode); if (emp != null) { Helpers.GetInstance().DoLog("Va a borrar el empleado " + emp.Nombre + " " + emp.Apellido + " con personid: " + emp.PersonID.ToString() + " asociado al panelID: " + PanelID.ToString() + " llamado:" + panelName); WebServiceAPI.GetInstance().EliminarEmpleado(emp.PersonID, out errDesc, out errCode); } else { Helpers.GetInstance().DoLog("emp es NULL en deletePanel. NO borró el empleado asociado al panel " + PanelID.ToString()); } } } } catch (Exception ex) { Helpers.GetInstance().DoLog("EXCEPCION en deletePanel: " + ex.Message); } } catch (Exception ex) { Helpers.GetInstance().DoLog("EXCEPCION en deletePanelMUTEX: " + ex.Message); } //finally //{ // Helpers.GetInstance().mutexTCP_ACCESS.ReleaseMutex(); //} }
public static List <string> ListaPanelNames = new List <string>(); // Lista de todos los PanelNames que levanta este CommServer.. //string m_Name; //int m_PanelID; // Constructor de la clase managed asociada al Translator. // Hay una instancia por cada Translator, y por lo tanto una por cada Panel. public ManagedAccessControl() { PoolGetConnStatus.GetInstance(); // Lanza el thread de actualizacion de connStatusgeneral PoolGetConnStatus.GetInstance().addRefCount(); // Agrega un conteo de referencia PoolGetAcceso.GetInstance(); // Idem get accesos PoolGetAcceso.GetInstance().addRefCount(); PoolGetAlarm.GetInstance(); // Idem get Alarmas PoolGetAlarm.GetInstance().addRefCount(); PoolSetAcceso.GetInstance(); PoolSetAcceso.GetInstance().addRefCount(); // Idem setAccesos PoolSetAlarma.GetInstance(); // Idem SetAlarmas PoolSetAlarma.GetInstance().addRefCount(); }
/// <summary> /// Envia las asignaciones de serialnum a ID de accesos. /// </summary> /// <param name="serialsIDs"></param> public void sendIDSerials(string serialsIDs) { try { PoolSetAcceso.GetInstance().addSetAcceso(serialsIDs); Helpers.GetInstance().DoLog("Hecho addAcceso de: " + serialsIDs); if (PoolGetAcceso.GetInstance().isEmpty()) { //Helpers.GetInstance().DoLog("isEmpty dio True"); PoolSetAcceso.GetInstance().ContinuarPool(); // OK darlos de alta en AlutelMobility } //else // Helpers.GetInstance().DoLog("isEmpty dio False"); } catch (Exception ex) { Helpers.GetInstance().DoLog("EXCEPCION en SendIDSerials: " + ex.Message); } Helpers.GetInstance().DoLog("Llamo a sendIDSerials con: " + serialsIDs); }
/// <summary> /// Recibe un pedido de eventos desde un Panel LENEL /// </summary> public string pollAlutrackForEvent(string v_panelName, int v_panelID, int v_serialnum) { string deviceID = v_panelID.ToString(); string deviceName = v_panelName; string orgID = Helpers.GetInstance().MainOrgID.ToString(); try { string datosAccesos = PoolGetAcceso.GetInstance().GetAccesos(deviceName); if (!String.IsNullOrEmpty(datosAccesos)) { Helpers.GetInstance().DoLog("GetAccesos de " + v_panelName + "=" + datosAccesos); } return(datosAccesos); } catch (Exception ex) { Helpers.GetInstance().DoLog("EXCEPCION en pollAlutrackForEvent: " + ex.Message); return("FAIL"); } }
void enviarListaSetAccesos() { Helpers.GetInstance().DoLog("Comienza Task de envio de SET Accesos..."); while (!finalizarPoolSetAccesos.WaitOne(2000)) { Helpers.GetInstance().DoLog("Esperando datos de accesos de Mobiles"); continuarPoolSetAcceso.WaitOne(); // Espera que haya datos... continuarPoolSetAcceso.Reset(); Helpers.GetInstance().DoLog("Hay datos encolados"); if (!finalizarPoolSetAccesos.WaitOne(0)) { try { if (listaIDSerials != null) { string IDSerialsToSend = ""; lock (listaIDSerials) { while (listaIDSerials.Any()) { string IDS = listaIDSerials.Dequeue(); if (!String.IsNullOrEmpty(IDS)) { IDSerialsToSend += IDS.TrimEnd('|') + "|"; } } } if (!String.IsNullOrEmpty(IDSerialsToSend)) { string errDesc = ""; int errCode = -1; bool done = false; while (!done && !finalizarPoolSetAccesos.WaitOne(0)) { WebServiceAPI.GetInstance().AssignSerialNums(IDSerialsToSend, out errDesc, out errCode); if (errCode == (int)StatusCode.OK) { done = true; } else { Helpers.GetInstance().DoLog("Error al enviar serials de accesos: " + IDSerialsToSend + " " + errDesc); Thread.Sleep(1000); } } if (done) { Helpers.GetInstance().DoLog("Enviados los IDSerials:" + IDSerialsToSend); } PoolGetAcceso.GetInstance().ContinuarPoolGetAcceso(); // Como la llamada es bloqueante, si llega aca quiere decir que los envio todos. } } } catch (Exception ex) { Helpers.GetInstance().DoLog("EXCEPCION en enviarListaSetAccesos:" + ex.Message); } } } Helpers.GetInstance().DoLog("Finaliza Thread de actualizacion de SetAcceso"); }