private void enviarFinSyncJob(string HHID, StateObject e) { int chunkSize = FIXED_HEADER_LENGTH; string header = "TYPE:FINSYNC"; // 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.pendingJobs.Enqueue(j); // Nuevo: un pendingjobs por cada cliente. e.readyToSend.Set(); // Activar envio loguearString(HHID + "- TRABAJO FINSYNC", TiposLOG.LENEL); }
private void stopDeviceServer() { //tmrRebindClient.Enabled = false; StaticTools.reBind = false; mainApp.ComunicationSystem.socketServerGeneral.stopListening(); Thread.Sleep(500); try { StaticTools.obtenerMutex_StateObjectClients(); Dictionary<string, StateObject> listaClientes = mainApp.ComunicationSystem.socketServerGeneral.stateObjectsClients; List<StateObject> listaClientesBackup = new List<StateObject>(); foreach (KeyValuePair<string, StateObject> Cliente in listaClientes) { StateObject p = new StateObject(); p = Cliente.Value; listaClientesBackup.Add(p); } foreach (StateObject estado in listaClientesBackup) { estado.abortAllThreads(null); estado.closeAllSockets(); } mainApp.alutrackServerThread.Abort(); } catch (Exception) { } finally { StaticTools.liberarMutex_StateObjectClients(); } }
/// <summary> /// Envía un paquete para avisarle al hh que la sincronización finalizó. Ya sea por fin de imagenes o porque ya está sincronizado. /// Se manda tambien la lista de personID definitiva que tiene que tener el HH /// </summary> /// <param name="HHID"></param> /// <param name="e"></param> public void EnviarJobFinSync(string HHID, StateObject e) { try { // Armo el trabajo a enviar si el HH está conectado if (mainApp.ComunicationSystem.socketServerGeneral.isHandHeldOnLine(HHID)) { enviarAllPersonIDJob(HHID, e); enviarFinSyncJob(HHID, e); mainApp.DataManager.actualizarFechaSync(HHID); } } catch (Exception ex) { loguearString("Problema en EnviarFinSYNC: " + ex.Message, TiposLOG.HH); } }
private void enviarBloqueEmpleados(string dataEmp, string HHID, StateObject clientState) { try { //dataEmp = dataEmp.Trim('|'); // Saco último '|' // Armo el trabajo a enviar si el HH está conectado if (mainApp.ComunicationSystem.communicationLAYER.isPannelConnected(HHID)) { string dataStringEncriptado = dataEmp;//Encriptar_Datos.Encriptar.encriptar(dataEmp, communicationSystem.ClaveEncriptar); byte[] dataBytes = Encoding.ASCII.GetBytes(dataStringEncriptado); int chunkSize = FIXED_HEADER_LENGTH + dataBytes.Length; //TYPE:EMPLISTXVER,SIZE:(.*) string header = "TYPE:EMPLISTXVER,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; clientState.pendingJobs.Enqueue(j); // Nuevo: un pendingjobs por cada cliente. clientState.readyToSend.Set(); loguearString(HHID + "- TRABAJO Bloque de empleados por versión", TiposLOG.HH); } } catch (Exception ex) { loguearString("Excepción en enviarBloqueEmpleados: " + ex.Message, TiposLOG.HH); } }
//void addBeginEmpListJob(object sender, stringEventArgs v_eventArgs) //{ // string header = "TYPE:BEGINEMPLIST"; // // Nuevo: Encriptado de datos. // string headerEncriptado = Encriptar_Datos.Encriptar.encriptar(header, communicationSystem.ClaveEncriptar); // headerEncriptado = "SIZE:"+FIXED_HEADER_LENGTH.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); // //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 + "- TRABAJO BEGINEMPLIST", TiposLOG.ALUTRACK); //} // Envia el mensaje de fin del envio de los bloques de empleadosXVersion //void addEndEmpListJob(StateObject clientState) //{ // string header = "TYPE:ENDEMPLIST"; // // Nuevo: Encriptado de datos. // string headerEncriptado = Encriptar_Datos.Encriptar.encriptar(header, communicationSystem.ClaveEncriptar); // headerEncriptado = "SIZE:"+FIXED_HEADER_LENGTH.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); // //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. // clientState.pendingJobs.Enqueue(j); // clientState.readyToSend.Set(); // Le aviso al semaforo que hay cosas encoladas para mandar. // loguearString(clientState.HHID + "- TRABAJO ENDEMPLIST", TiposLOG.ALUTRACK); //} public void agregarTrabajoListaEmpleadosEspecifica(StateObject ClienteHH, string v_personIDs) { string personIDs ="'"+ v_personIDs+","; // Para poder encontrar con contains string dataString = ""; Dictionary<int, Employee> listaEmpleados = mainApp.DataManager.getListaEmpleados(); try { StaticTools.obtenerMutex_ListaEmpleados(); foreach (KeyValuePair<int, Employee> emp in listaEmpleados) { if (personIDs.Contains(","+emp.Value.PersonID.ToString())) { dataString += emp.Value.PersonID.ToString() + "," + emp.Value.VersionEmpleado.ToString() + "|"; } } } catch (Exception ex) { loguearString("Excepcion en agregarTrabajoListaEmpleadosEspecifica: " + ex.Message, TiposLOG.LENEL); } finally { StaticTools.liberarMutex_ListaEmpleados(); } if (dataString.Length > 0) 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 y no esta en proceso de abort... if (mainApp.ComunicationSystem.communicationLAYER.isPannelConnected(ClienteHH.HHID) && !ClienteHH.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. ClienteHH.pendingJobs.Enqueue(j); ClienteHH.readyToSend.Set(); // Le aviso al semaforo que hay cosas encoladas para mandar. loguearString(ClienteHH.HHID + "- Encolado TRABAJO EMPLIST", TiposLOG.LENEL); loguearString(ClienteHH.HHID + "- Cantidad de trabajos: " + ClienteHH.pendingJobs.Count.ToString(), TiposLOG.HH); // int orgID = mainApp.DataManager.obtenerOrganizationIDFromHHID(ClienteHH.HHID); //layerLENEL.enviarAccessLevelsDefinitions(v_eventArgs.stateObject.HHID, orgID); } else { loguearString(ClienteHH.HHID + "- no conectado. NO SE AGREGA EL TRABAJO " + dataString, TiposLOG.HH); } }
// Envia el trabajo ALLPERSONID al HH para indicarle los personID validos en funcion de los actuales AccessLevels public void enviarAllPersonIDJob(string HHID, StateObject e) { string allPersonID = mainApp.DataManager.loadAllPersonID(HHID); // Carga los PersonID con los IDs de las personas que pertenecen al HHID string allPersonIDEnc = Encriptar_Datos.Encriptar.encriptar(allPersonID, communicationSystem.ClaveEncriptar); byte[] dataBytes = Encoding.ASCII.GetBytes(allPersonIDEnc); int chunkSize = FIXED_HEADER_LENGTH + dataBytes.Length; string header = "TYPE:ALLPERSONID,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.pendingJobs.Enqueue(j); // Nuevo: un pendingjobs por cada cliente. e.readyToSend.Set(); int cantEnviados = 0; if (allPersonID.Trim().Length > 0) { cantEnviados=allPersonID.Split(',').Length; } loguearString(HHID + "- TRABAJO ALLPERSONID. Cant de PersonIDs enviados:" + cantEnviados.ToString(), TiposLOG.LENEL); }
public void agregarTrabajoAccessLevel(StateObject v_stateobject, string v_accessLevel) { string dataStringEncriptado = Encriptar_Datos.Encriptar.encriptar(v_accessLevel, communicationSystem.ClaveEncriptar); byte[] dataBytes = Encoding.ASCII.GetBytes(dataStringEncriptado); int chunkSize = FIXED_HEADER_LENGTH + dataBytes.Length; string header = "ACCESSLVL: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; v_stateobject.pendingJobs.Enqueue(j); v_stateobject.readyToSend.Set(); // Le aviso al semaforo que hay cosas encoladas para mandar. loguearString(v_stateobject.HHID + "-ACCESSLEVEL: " + v_accessLevel,TiposLOG.HH); }
private void EsperaProximoPedidoImagenes(StateObject e) { while (!e.masImagenes && !e.abortFlag) System.Threading.Thread.Sleep(1000); }
private void btnSTOPAlutrackServer_Click(object sender, EventArgs e) { tmrRebind.Enabled = false; StaticTools.reBind = false; mainApp.ComunicationSystem.socketServerGeneral.stopListening(); Thread.Sleep(500); try { StaticTools.obtenerMutex_StateObjectClients(); Dictionary<string, StateObject> listaClientes = mainApp.ComunicationSystem.socketServerGeneral.stateObjectsClients; List<StateObject> listaClientesBackup = new List<StateObject>(); foreach (KeyValuePair<string, StateObject> Cliente in listaClientes) { StateObject p = new StateObject(); p = Cliente.Value; listaClientesBackup.Add(p); } foreach (StateObject estado in listaClientesBackup) { estado.abortAllThreads(null); estado.closeAllSockets(); } //foreach (KeyValuePair<int, StateObject> Cliente in listaClientes) //{ // Cliente.Value.abortAllThreads(null); // Cliente.Value.closeAllSockets(); //} mainApp.alutrackServerThread.Abort(); btnStopAlutrackServer.Visible = false; btnStartAlutrackServer.Visible = true; } catch (Exception) { } finally { StaticTools.liberarMutex_StateObjectClients(); } }
public Dictionary<string, string> textData = new Dictionary<string, string>(); // Datos recibidos #endregion Fields #region Constructors public stringEventArgs(string v_value, StateObject v_stateObject) { text = v_value; stateObject = v_stateObject; LOGTYPE = TiposLOG.ALL; }
public Dictionary<string, string> textData = new Dictionary<string, string>(); // Datos recibidos #endregion Fields #region Constructors public byteArrayEventArgs(string v_header, byte[] v_data, StateObject v_state) { header = v_header; byteData = v_data; stateObject = v_state; }