public void IniciarColeta() { //busca ip na base de equipamentos using (MySqlConnection conexaoLocal = new MySqlConnection(stringConexao)) { MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = "select id, ip, cpf, coletaFinal " + "from equipamentos "; cmd.Connection = conexaoLocal; conexaoLocal.Open(); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { string ip = reader["ip"].ToString(); _UltimoRegistroBD = reader["coletaFinal"].ToString(); _IdEquipamento = reader["id"].ToString(); string numNsr = reader["coletaFinal"].ToString(); string cpf = reader["cpf"].ToString(); //MessageBox.Show(reader[0].ToString()); // dispara uma nova thread para executar ParametrosComunicacao comunicacao = new ParametrosComunicacao(1, cpf, ip); ParametrosComunicacao comunicacao2 = new ParametrosComunicacao(2, cpf, ip); Boolean multiThread = true; if (multiThread) { ThreadStart starter = delegate { Coleta1(comunicacao, numNsr); }; Thread Rep1 = new Thread(starter); Rep1.Start(); } else { //MessageBox.Show("Passou!"); Coleta1(comunicacao, numNsr); } } } }
private void Coleta1(ParametrosComunicacao pComunicacao, string numNsr) { _pararColeta = false; int ret; int nsr = 0; int statusColeta = 0; int resultadoColeta = 0; string numeroSerie; string dadosRegistro; bool recebeuUltimoBilhete = false; int numeroRegistrosLidos = 0; int tentativas = 0; //Limpa o listboxcoleta pela Thread //Invoke(new LimpaListBoxColeta(LimparListBoxColeta), new object[] { pComunicacao._ID }); /* Cria uma instancia da classe InnerRepSdk */ Sdk_Inner_Rep.InnerRepPlusSDK innerRep = new Sdk_Inner_Rep.InnerRepPlusSDK(); /* Define os parâmetros de comunicação com o REP é possível inibir o uso do ping na comunicação 1 não envia ping e qualquer outro valor envia o ping */ ret = innerRep.DefinirParametrosComunicacao(pComunicacao._CpfResponsavel, pComunicacao._IP, "**AUTENTICACAO**", 1); if (ret == (int)Sdk_Inner_Rep.InnerRepPlusSDK.ParametrosComunicacao.ERRO_CPF_RESPONSAVEL) { //Invoke(new AtualizaListBoxColeta(AtualizarListBoxColeta), new object[] { pComunicacao._ID, "Informe o CPF!" }); return; } /* Define que o REP ira iniciar a comunicacao passando os parametros Porta do Pc onde o rep ira comunicar e o tempo em segundos para cada conexao */ if (pComunicacao._RepIniciaComunicacao) { ret = innerRep.DefinirRepIniciaConexao(pComunicacao._PortaComputador, pComunicacao._TempoEspera); } nsr = int.Parse(numNsr) - 1; /* Loop até receber o último NSR */ while (!recebeuUltimoBilhete && !_pararColeta) { try { String UltimoRegistro = String.Empty; /* Solicita os Registros de forma incremental... */ nsr++; ret = innerRep.SolicitarRegistroNsr(nsr); /* Verifica a conexão com o REP */ if (ret == 0) { /* Solicita o Status da Leitura.. */ statusColeta = innerRep.LerStatusColeta(); tentativas = 0; /* Enquanto Status da leitura estiver em Andamento (1) verifica o status novamente.. */ while (statusColeta < 2 && tentativas < 1000) { Thread.Sleep(10); //Application.DoEvents(); Thread.Sleep(10); statusColeta = innerRep.LerStatusColeta(); tentativas++; } /* Status da coleta recebido, verifica se recebeu o registro com sucesso */ if ((statusColeta == (int)Sdk_Inner_Rep.InnerRepPlusSDK.StatusLeitura.FINALIZADA_COM_ULTIMO_REGISTRO) || (statusColeta == (int)Sdk_Inner_Rep.InnerRepPlusSDK.StatusLeitura.FINALIZADA_COM_REGISTRO)) { /* Recupera o número de Série do REP */ numeroSerie = innerRep.LerNumSerieRep(); //Atualiza o label NumSeriecoleta pela Thread //Invoke(new AtualizaNumSerieColeta(AtualizarNumSerieColeta), new object[] { pComunicacao._ID, numeroSerie }); /* Recebe o resultado da leitura */ resultadoColeta = innerRep.LerResultadoColeta(); /* Faz a leitura do registro e exibe no listbox */ dadosRegistro = innerRep.LerRegistroLinha(); if (dadosRegistro != "" && dadosRegistro != null) { Int32 regAfetado = 0; using (MySqlConnection conexaoLocal = new MySqlConnection(this.stringConexao)) { MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = "INSERT INTO nsr (nsr) VALUES (@nsr) "; cmd.Connection = conexaoLocal; conexaoLocal.Open(); cmd.Parameters.Add(new MySqlParameter("@nsr", dadosRegistro)); regAfetado = cmd.ExecuteNonQuery(); if (regAfetado == 0) { //MessageBox.Show("DadosRegistro não incluido:" + dadosRegistro); } //Insere no listboxcoleta pela Thread //Invoke(new AtualizaListBoxColeta(AtualizarListBoxColeta), new object[] { pComunicacao._ID, dadosRegistro }); } //MessageBox.Show("inclui:" + dadosRegistro); //MessageBox.Show("tamanho:" + dadosRegistro.Length.ToString()); /* PARTE DA TABELA NOVA */ Int32 iRegAfetado = 0; String sCodigo = dadosRegistro.Substring(0, 9); String sRegistro = dadosRegistro.Substring(9, 1); String sDatas = dadosRegistro.Substring(10, 8); //MessageBox.Show(sDatas); sDatas = sDatas.Substring(4, 4) + "-" + sDatas.Substring(2, 2) + "-" + sDatas.Substring(0, 2); String sHora = dadosRegistro.Substring(18, 4); sHora = sHora.Substring(0, 2) + ":" + sHora.Substring(2, 2); String sPis = dadosRegistro.Substring(22); if (sPis.Length > 12) { sPis = sPis.Substring(0, 12); } using (MySqlConnection conexaoLocal = new MySqlConnection(this.stringConexao)) { MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = "INSERT INTO registros(idEquipamento, codigo, registro, data, hora, pis, nsrcompleto) VALUES(@idEquipamento, @codigo, @registro, @data, @hora, @pis, @nsrcompleto)"; cmd.Connection = conexaoLocal; conexaoLocal.Open(); cmd.Parameters.Add(new MySqlParameter("@idEquipamento", _IdEquipamento)); cmd.Parameters.Add(new MySqlParameter("@codigo", sCodigo)); cmd.Parameters.Add(new MySqlParameter("@registro", sRegistro)); cmd.Parameters.Add(new MySqlParameter("@data", sDatas)); cmd.Parameters.Add(new MySqlParameter("@hora", sHora)); cmd.Parameters.Add(new MySqlParameter("@pis", sPis)); cmd.Parameters.Add(new MySqlParameter("@nsrcompleto", dadosRegistro)); iRegAfetado = cmd.ExecuteNonQuery(); if (iRegAfetado == 0) { //MessageBox.Show("DadosRegistro não incluido:" + dadosRegistro); } _UltimoRegistroProcessado = sCodigo; } } /* Incrementa a quantidade de registros lidos e atualiza o label..*/ numeroRegistrosLidos++; //lblNumeroRegistrosLidos.Text = numeroRegistrosLidos.ToString(); _NumeroTotal = _NumeroTotal + numeroRegistrosLidos; //Atualiza o label NumRegistrosLidos pela Th.read //Invoke(new AtualizaNumRegistrosColeta(AtualizarNumRegLidosColeta), new object[] { pComunicacao._ID, numeroRegistrosLidos.ToString() }); } /* Exibe o maior registro lido e o menor registro Lido */ //Invoke(new AtualizaMaiorDataColeta(AtualizarMaiorDataColeta), new object[] { pComunicacao._ID, innerRep.LerMaiorDataEntreRegistroLidos() }); //Invoke(new AtualizaMenorDataColeta(AtualizarMenorDataColeta), new object[] { pComunicacao._ID, innerRep.LerMenorDataEntreRegistroLidos() }); /* Exibe o maior registro de empresa Lido */ //Invoke(new AtualizaUltimaEmpresaColeta(AtualizarEmpresaLidaColeta), new object[] { pComunicacao._ID, innerRep.LerUltimaEmpresa() }); /* Se o status da coleta foi finalizado com ultimo registro, ou se a coleta não possui registros, sai do laço.. */ if ((statusColeta == (int)Sdk_Inner_Rep.InnerRepPlusSDK.StatusLeitura.FINALIZADA_SEM_REGISTRO) || (statusColeta == (int)Sdk_Inner_Rep.InnerRepPlusSDK.StatusLeitura.FINALIZADA_COM_ULTIMO_REGISTRO)) { recebeuUltimoBilhete = true; } else // Falha de Conexão if (statusColeta == (int)Sdk_Inner_Rep.InnerRepPlusSDK.StatusLeitura.FALHA_DE_CONEXAO) { //Invoke(new AtualizaListBoxColeta(AtualizarListBoxColeta), new object[] { pComunicacao._ID, "Não foi possível realizar a conexão com o Inner Rep Plus de IP: " + pComunicacao._IP }); //MessageBox.Show("Não foi possível realizar a conexão com o Inner Rep Plus de IP: " + pComunicacao._IP); break; } } else { //Atualiza o listboxColeta pela Thread //Invoke(new AtualizaListBoxColeta(AtualizarListBoxColeta), new object[] { pComunicacao._ID, "erro" }); break; } } catch (Exception ex) { //MessageBox.Show("Erro: " + ex.ToString()); } } using (MySqlConnection conexaoLocal = new MySqlConnection(this.stringConexao)) { MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = "UPDATE EQUIPAMENTOS SET coletaInicial=@coletaInicial, coletaFinal=@coletaFinal WHERE id=@id "; cmd.Connection = conexaoLocal; conexaoLocal.Open(); cmd.Parameters.Add(new MySqlParameter("@id", _IdEquipamento)); cmd.Parameters.Add(new MySqlParameter("@coletaInicial", _UltimoRegistroBD)); cmd.Parameters.Add(new MySqlParameter("@coletaFinal", _UltimoRegistroProcessado)); try { int i = cmd.ExecuteNonQuery(); if (i > 0) { //MessageBox.Show("Registro atualizado com sucesso!"); } } catch (Exception ex) { //MessageBox.Show("Erro: " + ex.ToString()); } } if (recebeuUltimoBilhete) { /* Insere no listBox o cabeçalho do AFD montado com os registros coletados */ //Invoke(new AtualizaListBoxColeta(AtualizarListBoxColeta), new object[] { pComunicacao._ID, innerRep.LerCabecalhoRegistrosColetados() }); /* Insere no listBox o trailer do AFD montado com os registros coletados */ //Invoke(new AtualizaListBoxColeta(AtualizarListBoxColeta), new object[] { pComunicacao._ID, innerRep.LerTrailerRegistrosColetados() }); } innerRep.FinalizarLeitura(); _pararColeta = false; }