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);
 }
Example #9
0
        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();
            }
        }
Example #10
0
        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;
        }
Example #11
0
        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;
        }