/// <summary> /// Agrega a la cola de trabajos el trabajo de enviar la lista completa de versiones de empleados /// BETA: Todos son ADMIN: true y todos tienen Password: alutel /// NUEVO: EMPLIST envia ahora SOLAMENTE la lista de versiones de empleados, para que el HH pida solamente los que le faltan /// </summary> /// <param name="v_eventArgs"></param> public void agregarTrabajoListaEmpleados(stringEventArgs v_eventArgs) { try { string dataString = ""; Dictionary<int, Employee> listaEmpleados = mainApp.DataManager.getListaEmpleados(); DateTime ultimaActualizacionHandHeld = mainApp.DataManager.obtenerUltimaFechaSync(v_eventArgs.stateObject.HHID); //MUTEX try { StaticTools.obtenerMutex_ListaEmpleados(); loguearString("Entro a agregarTrabajoListaEmpleados(EMPLIST) con : " + listaEmpleados.Count.ToString(),TiposLOG.LENEL); foreach (KeyValuePair<int, Employee> emp in listaEmpleados) { if (v_eventArgs.stateObject.abortFlag) { loguearString("Hizo ABORTFLAG=TRUE ",TiposLOG.LENEL); break; } //if (i == 0) break; // debug //i--; // debug DateTime ultimaActualizacionEmpleado = emp.Value.ultimaActualizacion; Tarjeta tarjeta = mainApp.DataManager.buscarTarjetadeEmpleado(emp.Value.Id); // Solo se envia la info de un empleado si tiene tarjeta asociada y algun accesslevel asociado if ((tarjeta != null)) { string accessLevels =AccessLevelLogic.getAccessLevelsByBadgeInHH(tarjeta.NUMERODETARJETA, v_eventArgs.stateObject.HHID); DateTime ultimaActualizacionTarjeta = tarjeta.ultimaActualizacion; if (accessLevels.Trim().Length>0) { if ((ultimaActualizacionEmpleado > ultimaActualizacionHandHeld)||(ultimaActualizacionTarjeta > ultimaActualizacionHandHeld )) { // Envío los empleados con sus versiones para que el hh pida los datos SOLO de aquellos que cambiaron dataString += emp.Value.PersonID.ToString() + "," + emp.Value.VersionEmpleado.ToString() + "|"; } } } } // loguearString("dataString: " + dataString,TiposLOG.LENEL); } catch (Exception ex) { loguearString("Excepcion en agregarTrabajoListaEmpleados-MUTEX " + ex.Message, TiposLOG.HH); } finally { //MUTEX StaticTools.liberarMutex_ListaEmpleados(); } if (dataString.Length > 0) dataString = dataString.Substring(0, dataString.Length - 1); // Le saco el | de más al final else { EnviarJobFinSync(v_eventArgs.stateObject.HHID, v_eventArgs.stateObject); return; } // Solo encola el trabajo si se dispone efectivamente informacion sobre el HH y no esta en proceso de abort... if (mainApp.ComunicationSystem.communicationLAYER.isPannelConnected(v_eventArgs.stateObject.HHID) && !v_eventArgs.stateObject.abortFlag) { string dataStringEncriptado = Encriptar_Datos.Encriptar.encriptar(dataString, communicationSystem.ClaveEncriptar); byte[] dataBytes = Encoding.ASCII.GetBytes(dataStringEncriptado); int chunkSize = FIXED_HEADER_LENGTH + dataBytes.Length; string header = "TYPE:EMPLIST,SIZE:" + chunkSize.ToString(); // Nuevo: Encriptado de datos. string headerEncriptado = Encriptar_Datos.Encriptar.encriptar(header, communicationSystem.ClaveEncriptar); headerEncriptado = "SIZE:" + chunkSize.ToString() + ",DATA:" + headerEncriptado; string finalHeader = headerEncriptado.PadRight(FIXED_HEADER_LENGTH); byte[] headerBytedata = Encoding.ASCII.GetBytes(finalHeader); byte[] dataToSend = new byte[finalHeader.Length + dataBytes.Length]; System.Buffer.BlockCopy(headerBytedata, 0, dataToSend, 0, headerBytedata.Length); System.Buffer.BlockCopy(dataBytes, 0, dataToSend, headerBytedata.Length, dataBytes.Length); JobToSendToClient j = new JobToSendToClient(); jobCounter++; j.ID = jobCounter; j.header = headerEncriptado; // Usa el encriptado. j.byteData = dataToSend; // Nuevo: un pendingJobs por cada stateobject de cada cliente. v_eventArgs.stateObject.pendingJobs.Enqueue(j); v_eventArgs.stateObject.readyToSend.Set(); // Le aviso al semaforo que hay cosas encoladas para mandar. loguearString(v_eventArgs.stateObject.HHID + "- Encolado TRABAJO EMPLIST", TiposLOG.LENEL); // loguearString(v_eventArgs.stateObject.HHID + "- Cantidad de trabajos: " + v_eventArgs.stateObject.pendingJobs.Count.ToString(), TiposLOG.ALUTRACK); int orgID = mainApp.DataManager.obtenerOrganizationIDFromHHID(v_eventArgs.stateObject.HHID); //layerLENEL.enviarAccessLevelsDefinitions(v_eventArgs.stateObject.HHID, orgID); } else { loguearString(v_eventArgs.stateObject.HHID + "- no conectado. NO SE AGREGA EL TRABAJO " + dataString, TiposLOG.HH); } } catch (Exception ex) { loguearString("Excepcion en agregarTrabajoListaEmpleados(): " + ex.Message, TiposLOG.HH); } }
/// <summary> /// Actualiza localmente el ultimo dato GPS recibido y lanza el evento que verifica los accesos a las Virtual gates. /// </summary> /// <param name="sender"></param> /// <param name="v_eventArgs"></param> void actualizeGPS(object sender, stringEventArgs v_eventArgs) { string HHID = v_eventArgs.textData["HHID"]; string latitud = v_eventArgs.textData["LATITUD"]; string longitud = v_eventArgs.textData["LONGITUD"]; string hora = v_eventArgs.textData["HORA"]; EventoGPS nuevoEvento = new EventoGPS(HHID, mainApp.InterpretarLatitud(latitud), mainApp.InterpretarLongitud(longitud), hora); EventoGPS ultimoEvento = mainApp.DataManager.getLastEventoGPS(HHID); mainApp.DataManager.addEventoGPS(HHID, nuevoEvento); mainApp.DataManager.updateVirtualGateEvents(ultimoEvento, nuevoEvento); }
void ThreadEnviarVersionImagenes(stringEventArgs e) { StateObject clientState = e.stateObject; try { string dataString = ""; Dictionary<int, Employee> listaEmpleados = mainApp.DataManager.getListaEmpleados(); //int i = 50; // Para debug foreach (KeyValuePair<int, Employee> emp in listaEmpleados) { if (clientState.abortFlag) { break; } //if (i == 0) break; // debug //i--; // debug // VERIFICO QUE EL EMPLEADO TENGA IMAGEN string pathImagenDB = mainApp.DataManager.cargarPathImagen(emp.Value.PersonID.ToString()); if (HayImagen(pathImagenDB)) { Tarjeta tarjeta = mainApp.DataManager.buscarTarjetadeEmpleado(emp.Value.Id); // Solo se envia la info de un empleado si tiene tarjeta asociada y algun accesslevel asociado if (tarjeta != null) { string accessLevels = AccessLevelLogic.getAccessLevelsByBadgeInHH(tarjeta.NUMERODETARJETA, e.stateObject.HHID); if (accessLevels.Trim().Length > 0) { // Envío las versiones de las imagenes para que el hh pida los datos SOLO de aquellos que cambiaron dataString += emp.Value.PersonID.ToString() + ":" + emp.Value.imageVersion.ToString() + ","; } } } } if (dataString.Length > 0) // Si ninguna de las tarjetas a enviar al HH tienen foto, terminar la secuencia enviando FinSYNC { dataString = dataString.Substring(0, dataString.Length - 1); // Le saco el | de más al final // Solo encola el trabajo si se dispone efectivamente informacion sobre el HH if (mainApp.ComunicationSystem.communicationLAYER.isPannelConnected(e.stateObject.HHID) && (!clientState.abortFlag)) { string dataStringEncriptado = Encriptar_Datos.Encriptar.encriptar(dataString, communicationSystem.ClaveEncriptar); byte[] dataBytes = Encoding.ASCII.GetBytes(dataStringEncriptado); int chunkSize = FIXED_HEADER_LENGTH + dataBytes.Length; string header = "TYPE:VERIMGLIST,SIZE:" + chunkSize.ToString(); // Nuevo: Encriptado de datos. string headerEncriptado = Encriptar_Datos.Encriptar.encriptar(header, communicationSystem.ClaveEncriptar); headerEncriptado = "SIZE:" + chunkSize.ToString() + ",DATA:" + headerEncriptado; string finalHeader = headerEncriptado.PadRight(FIXED_HEADER_LENGTH); byte[] headerBytedata = Encoding.ASCII.GetBytes(finalHeader); byte[] dataToSend = new byte[finalHeader.Length + dataBytes.Length]; System.Buffer.BlockCopy(headerBytedata, 0, dataToSend, 0, headerBytedata.Length); System.Buffer.BlockCopy(dataBytes, 0, dataToSend, headerBytedata.Length, dataBytes.Length); JobToSendToClient j = new JobToSendToClient(); jobCounter++; j.ID = jobCounter; j.header = headerEncriptado; // Usa el encriptado. j.byteData = dataToSend; // Nuevo: un pendingJobs por cada stateobject de cada cliente. e.stateObject.pendingJobs.Enqueue(j); e.stateObject.readyToSend.Set(); // Le aviso al semaforo que hay cosas encoladas para mandar. loguearString(e.stateObject.HHID + "- TRABAJO VERIMGLIST", TiposLOG.HH); loguearString(e.stateObject.HHID + "- Cantidad de trabajos: " + e.stateObject.pendingJobs.Count.ToString(), TiposLOG.HH); } else { loguearString(e.stateObject.HHID + "- No conectado. NO SE AGREGA EL TRABAJO " + dataString, TiposLOG.HH); } } else // Si ninguna de las tarjetas a enviar al HH tienen foto, terminar la secuencia enviando FinSYNC { EnviarJobFinSync(e.stateObject.HHID, e.stateObject); } } catch (Exception ex) { loguearString("Excepcion en ThreadEnviarVersionImagenes(): " + ex.Message, TiposLOG.HH); } }
/// <summary> /// Handler /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void agregarItemLOG(object sender, stringEventArgs e) { loguearString(e.text, e.LOGTYPE); //try //{ // LOGInformation.Enqueue(e); // MUTEX ACA?? //} //catch (Exception ex) //{ //} }
//***********************************LOG******************************************* /// <summary> /// /// </summary> /// <param name="v_texto"></param> /// <param name="v_tipoLOG"></param> private void loguearString(string v_texto, TiposLOG v_tipoLOG) { if (m_LOGHandler != null) { stringEventArgs p = new stringEventArgs(v_texto, null); p.LOGTYPE = v_tipoLOG; m_LOGHandler(this, p); // Llamada al handler del LOG. } }
void ThreadAddSendEmployeeListJob(stringEventArgs e) { //Se envian los AccessLevels UNA sola vez por conexion, if (!e.stateObject.envioInicialAccessLevels) { string HHID = e.stateObject.HHID; int orgID = mainApp.DataManager.obtenerOrganizationIDFromHHID(HHID); communicationLAYER.enviarAccessLevelsDefinitions(HHID, orgID,"1"); // El "1"es para que no se envion los allPersonIDs en esta llamada. e.stateObject.envioInicialAccessLevels= true; } agregarTrabajoListaEmpleados(e); }
public void agregarEmp(object sender, stringEventArgs e) { try { string dataEmp = string.Empty; string isAdmin_BETA = "true"; string passWord_BETA = "alutel"; string tarjeta = e.textData["TARJETA"]; // La tarjeta del empleado que se va a agregar string id = e.textData["HHID"]; Employee emp = mainApp.DataManager.buscarEmpleadoxTarjeta(tarjeta); Tarjeta t = mainApp.DataManager.buscarTarjetadeEmpleado(emp.Id); // Solo se envia la info de un empleado si tiene tarjeta asociada y algun accesslevel asociado if ((tarjeta == null) || (t == null)) { loguearString("NO SE PUDO ENVIAR LA INFORMACIÓN DEL EMPLEADO CON TARJETA " + tarjeta, TiposLOG.HH); return; } string accessLevels = AccessLevelLogic.getAccessLevelsByBadgeInHH(t.NUMERODETARJETA, e.stateObject.HHID); if (accessLevels.Trim().Length > 0) { dataEmp = "TARJETA:" + t.NUMERODETARJETA + ",NOMBRE:" + emp.Nombre + ",APELLIDO:" + emp.Apellido + ",DOCUMENTO:" + emp.NumeroDocumento + ",EMPRESA:" + emp.Empresa + ",ACCESO:" + t.ESTADO.ToString() + ",IMGVER:" + emp.imageVersion.ToString().Trim() + ",ADMIN:" + isAdmin_BETA + ",PASS:"******",ACCESSID:" + accessLevels + ",VERSION:" + emp.VersionEmpleado.ToString() +",PERSONID:" + emp.PersonID.ToString(); //dataEmp = "TARJETA:" + t.NUMERODETARJETA + ",NOMBRE:" + emp.Nombre + ",APELLIDO:" + emp.Apellido + ",DOCUMENTO:" + emp.NumeroDocumento + ",EMPRESA:" + emp.Empresa + ",ACCESO:" + t.ESTADO.ToString() + ",IMGVER:" + emp.imageVersion.ToString().Trim() + ",ADMIN:" + isAdmin_BETA + ",PASS:"******",ACCESSID:" + accessLevels; } // Solo encola el trabajo si se dispone efectivamente informacion sobre el HH if (mainApp.ComunicationSystem.communicationLAYER.isPannelConnected(id)) { string dataStringEncriptado = Encriptar_Datos.Encriptar.encriptar(dataEmp, communicationSystem.ClaveEncriptar); byte[] dataBytes = Encoding.ASCII.GetBytes(dataStringEncriptado); int chunkSize = FIXED_HEADER_LENGTH + dataBytes.Length; //TYPE:ADDEMP,SIZE:(.*) string header = "TYPE:ADDEMP,SIZE:" + chunkSize.ToString(); // Nuevo: Encriptado de datos. string headerEncriptado = Encriptar_Datos.Encriptar.encriptar(header, communicationSystem.ClaveEncriptar); headerEncriptado = "SIZE:" + chunkSize.ToString() + ",DATA:" + headerEncriptado; string finalHeader = headerEncriptado.PadRight(FIXED_HEADER_LENGTH); byte[] headerBytedata = Encoding.ASCII.GetBytes(finalHeader); byte[] dataToSend = new byte[finalHeader.Length + dataBytes.Length]; System.Buffer.BlockCopy(headerBytedata, 0, dataToSend, 0, headerBytedata.Length); System.Buffer.BlockCopy(dataBytes, 0, dataToSend, headerBytedata.Length, dataBytes.Length); JobToSendToClient j = new JobToSendToClient(); jobCounter++; j.ID = jobCounter; j.header = headerEncriptado; j.byteData = dataToSend; e.stateObject.pendingJobs.Enqueue(j); // Nuevo: un pendingjobs por cada cliente. e.stateObject.readyToSend.Set(); loguearString(e.stateObject.HHID + "- TRABAJO Agregar empleado: " + header, TiposLOG.HH); } } catch (Exception ex) { loguearString("Excepción agregando empleado: "+ex.Message, TiposLOG.HH); } }
void borrarEmp(object sender, stringEventArgs e) { try { string tarjeta = e.textData["TARJETA"]; // La tarjeta del empleado que se va a eliminar string id = e.textData["HHID"]; // Solo encola el trabajo si se dispone efectivamente informacion sobre el HH if (mainApp.ComunicationSystem.communicationLAYER.isPannelConnected(id)) { int chunkSize = FIXED_HEADER_LENGTH; string header = "TYPE:DELEMP,SIZE:" + chunkSize.ToString() + ",BADGE:" + tarjeta; // Nuevo: Encriptado de datos. string headerEncriptado = Encriptar_Datos.Encriptar.encriptar(header, communicationSystem.ClaveEncriptar); headerEncriptado = "SIZE:" + chunkSize.ToString() + ",DATA:" + headerEncriptado; string finalHeader = headerEncriptado.PadRight(FIXED_HEADER_LENGTH); byte[] headerBytedata = Encoding.ASCII.GetBytes(finalHeader); byte[] dataToSend = new byte[finalHeader.Length]; System.Buffer.BlockCopy(headerBytedata, 0, dataToSend, 0, headerBytedata.Length); JobToSendToClient j = new JobToSendToClient(); jobCounter++; j.ID = jobCounter; j.header = headerEncriptado; j.byteData = dataToSend; e.stateObject.pendingJobs.Enqueue(j); // Nuevo: un pendingjobs por cada cliente. e.stateObject.readyToSend.Set(); loguearString(e.stateObject.HHID + "- TRABAJO Borrar empleado: " + header, TiposLOG.HH); } } catch (Exception ex) { loguearString("Excepción borrando empleado: " + ex.Message, TiposLOG.HH); } }
public void enviarAgregarUnEmpleado(string tarjeta, string v_HHID) { if (mainApp.ComunicationSystem.socketServerGeneral.isHandHeldOnLine(v_HHID)) { StateObject cliente = mainApp.ComunicationSystem.socketServerGeneral.getCliente(v_HHID); if (cliente != null) { stringEventArgs e = new stringEventArgs("", cliente); e.textData.Add("HHID", v_HHID); e.textData.Add("TARJETA", tarjeta); mainApp.ComunicationSystem.agregarEmp(this, e); } } else loguearString("enviarAgregarUnEmpleado(): " + v_HHID + " no está online"); //string header = "TYPE:ADDEMP,HHID:" + v_HHID + ",SIZE:" + communicationSystem.FIXED_HEADER_LENGTH + ",BADGE:" + tarjeta; //try //{ // StaticTools.obtenerMutex_StateObjectClients(); // Dictionary<string, StateObject> listaClientes = mainApp.ComunicationSystem.socketServerGeneral.stateObjectsClients; // bool enc = false; // StateObject ClienteHH = null; // foreach (KeyValuePair<string, StateObject> pair in listaClientes) // { // if (pair.Value.HHID == v_HHID) // { // enc = true; // ClienteHH = pair.Value; // break; // } // } // if (enc) // { // loguearString("VA A AGREGAR EL EMPLEADO: " + tarjeta); // mainApp.ComunicationSystem.socketServerGeneral.AddJobs(header, null, ClienteHH); // } //} //catch (Exception ex) //{ // loguearString(v_HHID + " - excepcion en enviarAgrearUnEmpleado(): " + ex.Message); //} //finally //{ // StaticTools.liberarMutex_StateObjectClients(); //} }
private void loguearString(string v_texto) { if (m_LOGHandler != null) { stringEventArgs p = new stringEventArgs(v_texto, null); p.LOGTYPE = TiposLOG.LENEL; this.m_LOGHandler(this, p); } else { StaticTools.loguearString(v_texto); } }
// /// <summary> /// AddJobs: Reconoce de Headers y responde en consecuencia /// </summary> /// <param name="v_header"></param> /// <param name="v_byteData"></param> /// <param name="v_state"></param> public void AddJobs(string v_header, byte[] v_byteData, StateObject v_state) { Match matchHeader; byte[] finalBuffer = v_byteData; string retMessage = ""; string resConnectMessage = ""; // RECIBI un registro GPS // NUEVO EN VERSION 1.3: Se conecta al alutrack via ALUTRACK LAYER matchHeader = GPSdata.Match(v_header); if (matchHeader.Success) { loguearString(v_header); // Loguea el GPS string HHID = getMatchData(matchHeader, 1).Trim(); string latitud = getMatchData(matchHeader, 3).Trim(); string longitud = getMatchData(matchHeader, 4).Trim(); string hora = getMatchData(matchHeader, 5).Trim(); string heading = getMatchData(matchHeader, 6).Trim(); string speed =getMatchData(matchHeader, 7).Trim(); stringEventArgs retorno = new stringEventArgs(v_header, v_state); retorno.textData.Add("HHID", HHID); retorno.textData.Add("LATITUD", latitud); retorno.textData.Add("LONGITUD", longitud); retorno.textData.Add("HORA", hora); // Actualiza la base LOCAL con los GPS, chequea los accesos a zonas y da de alta eventos de acceso en caso de Entrada/Salida. this.actualizeGPSData(this, retorno); mainApp.DataManager.actualizarUltimaPosGPS(latitud, longitud, hora, HHID); //******************************************** // Conexion al layer ALUTRACK: Alutracklayer //******************************************** if (!HHGPSLayer.isConnected(HHID)) { if (HHGPSLayer.conectar(HHID, out resConnectMessage)) { // loguearString("HandHeld: " + HHID + " conectado al ALUTRACK LAYER"); if (HHGPSLayer.sendGPSData(HHID, latitud, longitud, hora, heading, speed, out retMessage)) { // loguearString(HHID + " envio GPS(" + latitud + "," + longitud + ") al ALUTRACK LAYER"); } else { // loguearString("Error al enviar GPS desde el HH: " + HHID + ", error: " + retMessage + ". Desconectando..."); HHGPSLayer.desconectar(HHID); // loguearString("HH: " + HHID + "desconectado"); } } else // No se pudo conectar... { // loguearString("Error al conectar HHID: " + HHID + "- " + resConnectMessage); } } else { if (HHGPSLayer.sendGPSData(HHID, latitud, longitud, hora, heading, speed, out retMessage)) { loguearString(HHID + " envio GPS(" + latitud + "," + longitud + ") al ALUTRACK LAYER"); } else { //loguearString("Error al enviar GPS desde el HH: " + HHID + " Error: " + retMessage); } } return; } // RECIBI DUMMY // matchHeader = dummyHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); loguearString(HHID + "- DUMMY" ); //stringEventArgs retorno = new stringEventArgs(v_header, v_state); //this.responderDUMMY(this, retorno); return; } // RECIBI el pedido de actualización de la lista de empleados. // Es el lugar donde se asocia el StateObject al HHID y a la Organizacion. // Si el dispositivo esta registrado (agregado previamente desde LENEL o desde la WEB), entonces // se da de alta en la lista de stateObjectClients, con clave String HHID matchHeader = getEmpListHeader.Match(v_header); if (matchHeader.Success) { if (getEmployeeList != null) { string HHID = getMatchData(matchHeader, 1).Trim(); v_state.HHID = HHID; // registra el nombre del Dispositivo en el State del cliente. stringEventArgs retorno = new stringEventArgs(v_header, v_state); int orgID = mainApp.DataManager.obtenerOrganizationIDFromHHID(HHID); if (orgID > 0) { v_state.orgID=orgID; try { StaticTools.obtenerMutex_StateObjectClients(); if (!stateObjectsClients.ContainsKey(HHID)) { stateObjectsClients.Add(HHID, v_state); } } catch (Exception ex) { loguearString(HHID + " - excepcion en matchHeader= getEmpListHeader creando Stateobject: " + ex.Message); } finally { StaticTools.liberarMutex_StateObjectClients(); } this.getEmployeeList(this, retorno); // hace un rise para avisar que va a comenzar el envio de lista de empleados. } else { loguearString("El HH: " + HHID + " no tiene organizacion asociada."); v_state.abortAllThreads(null); v_state.closeAllSockets(); } } return; } // Desde Lenel se eliminó un empleado matchHeader = DeleteEmpHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); string tarjeta = getMatchData(matchHeader, 3).Trim(); stringEventArgs retorno = new stringEventArgs(v_header, v_state); retorno.textData.Add("HHID", HHID); retorno.textData.Add("TARJETA", tarjeta); this.deleteEmp(this, retorno); return; } // Desde Lenel se agregó un empleado matchHeader = AddEmpHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); string tarjeta = getMatchData(matchHeader, 3).Trim(); stringEventArgs retorno = new stringEventArgs(v_header, v_state); retorno.textData.Add("HHID", HHID); retorno.textData.Add("TARJETA", tarjeta); this.addEmp(this, retorno); return; } // Desde el HH recibí pedido de empleados por versión matchHeader = EmpxVersionHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); int chunkSize = Convert.ToInt32(getMatchData(matchHeader, 2).Trim()); byte[] byteData = getDataBytes(finalBuffer, chunkSize); byteArrayEventArgs retorno = new byteArrayEventArgs(v_header, byteData, v_state); retorno.textData.Add("HHID", HHID); this.sendEmpxVersion(this, retorno); return; } // Desde el HH recibí pedido de siguiente bloque de imagenes matchHeader = MasImgsHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); stringEventArgs retorno = new stringEventArgs(v_header, v_state); retorno.textData.Add("HHID", HHID); this.enviarMasImagenes(this, retorno); return; } // Desde el HH recibí pedido de lista de imagenes matchHeader = ImgVersionHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); stringEventArgs retorno = new stringEventArgs(v_header, v_state); retorno.textData.Add("HHID", HHID); this.enviarVersionImagenes(this, retorno); return; } // Desde el HH recibí pedido de lista de imagenes matchHeader = ImgListHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); int chunkSize = Convert.ToInt32(getMatchData(matchHeader, 2).Trim()); byte[] byteData = getDataBytes(finalBuffer, chunkSize); byteArrayEventArgs retorno = new byteArrayEventArgs(v_header, byteData, v_state); retorno.textData.Add("HHID", HHID); this.enviarListaImagenes(this, retorno); return; } // RECIBI un pedido de actualización de una imagen de un usuario. matchHeader = getImageHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); string tarjeta = getMatchData(matchHeader, 3).Trim(); stringEventArgs retorno = new stringEventArgs(v_header,v_state); retorno.textData.Add("HHID", HHID); retorno.textData.Add("TARJETA", tarjeta); this.getImage(this, retorno); // Hace un rise del evento registrado, el cual va a agregar el job EMPIMAGE a la lista de jobs del socket. return; } // RECIBI un ACCESS de una tarjeta matchHeader =accessHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); int chunkSize = int.Parse(getMatchData(matchHeader, 2)); string tarjeta = getMatchData(matchHeader, 3).Trim(); string Latitud = getMatchData(matchHeader, 4).Trim(); string Longitud = getMatchData(matchHeader, 5).Trim(); string hora = getMatchData(matchHeader, 6).Trim(); string hasImage = getMatchData(matchHeader, 7).Trim(); string tipoAcceso = getMatchData(matchHeader, 8).Trim(); string id = getMatchData(matchHeader, 9).Trim(); byte[] dataBytes; if (bool.Parse(hasImage)) { dataBytes = getDataBytes(finalBuffer, chunkSize); } else { dataBytes = new byte[0]; } byteArrayEventArgs retorno = new byteArrayEventArgs(v_header, dataBytes,v_state); retorno.textData.Add("HHID", HHID); retorno.textData.Add("TARJETA", tarjeta); retorno.textData.Add("LATITUD", Latitud); retorno.textData.Add("LONGITUD", Longitud); retorno.textData.Add("HORA", hora); retorno.textData.Add("IMAGEN", hasImage); retorno.textData.Add("TIPOACCESO", tipoAcceso); retorno.textData.Add("ID", id); loguearString("Reconocido ACCESO CON ID: " + id); this.actualizeAccess(this, retorno); // Llama al evento registrado para actualizar el movimiento de acceso return; } // RECIBI VISITA matchHeader = visitHeader.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); int chunkSize = int.Parse(getMatchData(matchHeader, 2)); string nombre = getMatchData(matchHeader, 3).Trim(); string apellido = getMatchData(matchHeader, 4).Trim(); string documento = getMatchData(matchHeader, 5).Trim(); string empresa = getMatchData(matchHeader, 6).Trim(); string tarjeta = getMatchData(matchHeader, 7).Trim(); string latitud = getMatchData(matchHeader, 8).Trim(); string longitud = getMatchData(matchHeader, 9).Trim(); string hora = getMatchData(matchHeader, 10).Trim(); string hasImage = getMatchData(matchHeader, 11).Trim(); string tipoAcceso = getMatchData(matchHeader, 12).Trim(); string id = getMatchData(matchHeader, 13).Trim(); byte[] dataBytes; if (bool.Parse(hasImage)) // Hay imagen asociada. Viene el databytes. { dataBytes = getDataBytes(finalBuffer, chunkSize); } else { dataBytes = new byte[0]; } byteArrayEventArgs retorno = new byteArrayEventArgs(v_header, dataBytes, v_state); retorno.textData.Add("HHID", HHID); retorno.textData.Add("TARJETA", tarjeta); retorno.textData.Add("NOMBRE", nombre); retorno.textData.Add("APELLIDO", apellido); retorno.textData.Add("DOCUMENTO", documento); retorno.textData.Add("EMPRESA", empresa); retorno.textData.Add("LATITUD", latitud); retorno.textData.Add("LONGITUD", longitud); retorno.textData.Add("HORA", hora); retorno.textData.Add("IMAGEN", hasImage); retorno.textData.Add("TIPOACCESO", tipoAcceso); retorno.textData.Add("ID", id); int orgID = mainApp.DataManager.obtenerOrganizationIDFromHHID(HHID); if (orgID > 0) { retorno.textData.Add("ORGID", orgID.ToString()); this.actualizeVisit(this, retorno); } return; } // Recibi un mensaje de Fin de sincronizacion matchHeader = FinSyncHeader.Match(v_header); if (matchHeader.Success) { mainApp.DataManager.actualizarFechaSync(v_state.HHID); mainApp.ComunicationSystem.EnviarJobFinSync(v_state.HHID, v_state); return; } // RECIBI ARCHIVO DE LOG matchHeader = LOGFile.Match(v_header); if (matchHeader.Success) { string HHID = getMatchData(matchHeader, 1).Trim(); int fileSize = int.Parse(getMatchData(matchHeader, 2)); string logName = getMatchData(matchHeader, 3).Trim(); try { byte[] dataBytes; dataBytes = getDataBytes(finalBuffer, fileSize); if (dataBytes.Length > 0 && logName != "") { DateTime ahora = DateTime.Now; string finalLogName = HHID + "_" + ahora.Year.ToString() + ahora.Month.ToString() + ahora.Day.ToString() + "_" + ahora.Hour.ToString() + "-" + ahora.Minute.ToString() + "-" + ahora.Second.ToString() + "_" + logName; File.WriteAllBytes(SystemConfiguration.ImagesPath + @"\" + finalLogName, dataBytes); } loguearString(HHID + " - Server recibió log: " + logName); stringEventArgs retorno = new stringEventArgs(logName, v_state); retorno.textData.Add("LOGNAME", logName); this.confirmarLOG(this, retorno); //TYPE:BORRARLOG Manda la confirmacion de recepcion del archivo de LOG para que el HH lo borre de su disco: BORRARLOG } catch (Exception ex) { loguearString(HHID +"- Excepcion en LOGFile: " + ex.Message); } return; } /* NO RECONOCIO HEADER */ else loguearString("ATENCION! Header no reconocido: " + v_header); }
private void loguearString2(string texto) { //LOGToFile.doLOGExcepciones(texto); loguearString(texto); if (actualizarLOG != null) { stringEventArgs p = new stringEventArgs(texto, null); p.LOGTYPE = TiposLOG.HH; this.actualizarLOG(this, p); } }
public void ThreadSendDummy() { StateObject StateClient = sessionState; try { while (!StateClient.abortFlag) { stringEventArgs retorno = new stringEventArgs("", StateClient); this.enviarDummy(this, retorno); Thread.Sleep(30000); } loguearString("ABORT: Saliendo de ThreadSendDummy()"); // Finalizo el thread: Libero los sockets, sus recursos y sus puertos. EliminarThreadsySockets(StateClient, sessionState.t_dummySend); } catch (Exception ex) { setAbortFlag("Excepcion en ThreadSendDummy. Abortando todos los threads. " + ex.Message, StateClient); EliminarThreadsySockets(StateClient, sessionState.t_dummySend); } }
void addSendEmployeeListJob(object sender, stringEventArgs e) { loguearString(e.stateObject.HHID + "-Pidio la lista de Versiones de Empleados",TiposLOG.LENEL); Thread t = new Thread(() => ThreadAddSendEmployeeListJob(e)); t.Name = "ThreadAddSendEmployeeListJob"; t.Start(); }
void enviarMasImagenes(object sender, stringEventArgs e) { // SETEAR FLAG PARA ENVIAR NUEVO BLOQUE DE IMAGENES e.stateObject.masImagenes = true; }
/// <summary> /// Evento lanzado por el socket que agrega un JOB de enviar una Imagen a la cola de pendingJobs. /// En el parametro TARJETA viene el numero de tarjeta cuya imagen hay que enviar. /// /// </summary> /// <param name="sender"></param> /// <param name="v_eventArgs"></param> void addSendImageJob(object sender, stringEventArgs v_eventArgs) { try { string tarjeta = v_eventArgs.textData["TARJETA"]; // La tarjeta cuya imagen hay que enviar int idEmp = mainApp.DataManager.buscarEmpleadoxTarjeta(tarjeta).Id; Dictionary<int, Employee> listaEmpleados = mainApp.DataManager.getListaEmpleados(); if (listaEmpleados.ContainsKey(idEmp)) { if (listaEmpleados[idEmp].hasImage()) { byte[] imageBytes = listaEmpleados[idEmp].getImage(); int chunkSize = FIXED_HEADER_LENGTH + imageBytes.Length; int imageVersion = listaEmpleados[idEmp].imageVersion; //string header = "TYPE:IMAGE,SIZE:" + chunkSize.ToString() + ",TARJETA:" + tarjeta + ",IMGVER:" + imageVersion.ToString().Trim(); string header = "TYPE:IMAGE,SIZE:" + chunkSize.ToString() + ",TARJETA:" + tarjeta + ",IMGVER:" + imageVersion.ToString().Trim() + ",PERSONID:" +listaEmpleados[idEmp].PersonID; // Nuevo: Encriptado de datos. string headerEncriptado = Encriptar_Datos.Encriptar.encriptar(header, communicationSystem.ClaveEncriptar); headerEncriptado = "SIZE:" + chunkSize.ToString() + ",DATA:" + headerEncriptado; string finalHeader = headerEncriptado.PadRight(FIXED_HEADER_LENGTH); byte[] headerBytedata = Encoding.ASCII.GetBytes(finalHeader); byte[] dataToSend = new byte[finalHeader.Length + imageBytes.Length]; System.Buffer.BlockCopy(headerBytedata, 0, dataToSend, 0, headerBytedata.Length); System.Buffer.BlockCopy(imageBytes, 0, dataToSend, headerBytedata.Length, imageBytes.Length); JobToSendToClient j = new JobToSendToClient(); jobCounter++; j.ID = jobCounter; j.header = headerEncriptado; j.byteData = dataToSend; v_eventArgs.stateObject.pendingJobs.Enqueue(j); // Nuevo: un pendingjobs por cada cliente. v_eventArgs.stateObject.readyToSend.Set(); loguearString(v_eventArgs.stateObject.HHID + "- TRABAJO SEND IMAGE: " + header, TiposLOG.HH); } else loguearString("No hay imagen asociada a la tarjeta " + tarjeta, TiposLOG.HH); } else { //lstStatus.Items.Add("ERROR: la tarjeta NO EXISTE"); } } catch (Exception e) { loguearString("Excepcion enviando imagen: " + e.Message, TiposLOG.HH); } }
void enviarVersionImagenes(object sender, stringEventArgs e) { loguearString(e.stateObject.HHID + " - Recibio pedido de LISTA DE VERSIONES DE IMAGENES", TiposLOG.LENEL); Thread t = new Thread(() => ThreadEnviarVersionImagenes(e)); t.Name = "ThreadEnviarVersionImagenes"; t.Start(); }
void enviarDummy(object sender, stringEventArgs e) { int chunkSize = FIXED_HEADER_LENGTH; string header = "TYPE:DUMMY"; // Nuevo: Encriptado de datos. string headerEncriptado = Encriptar_Datos.Encriptar.encriptar(header, communicationSystem.ClaveEncriptar); headerEncriptado = "SIZE:" + chunkSize.ToString() + ",DATA:" + headerEncriptado; string finalHeader = headerEncriptado.PadRight(FIXED_HEADER_LENGTH); byte[] headerBytedata = Encoding.ASCII.GetBytes(finalHeader); byte[] dataToSend = new byte[finalHeader.Length]; System.Buffer.BlockCopy(headerBytedata, 0, dataToSend, 0, headerBytedata.Length); JobToSendToClient j = new JobToSendToClient(); jobCounter++; j.ID = jobCounter; j.header = headerEncriptado; // Usa el encriptado. j.byteData = dataToSend; // Nuevo: un pendingJobs por cada stateobject de cada cliente. e.stateObject.pendingJobs.Enqueue(j); e.stateObject.readyToSend.Set(); }
public void loguearString(string v_texto) { if (actualizarLOG != null) { stringEventArgs p = new stringEventArgs(v_texto, null); p.LOGTYPE = TiposLOG.HH; actualizarLOG(this, p); } }