public void salvaHistorico(Historico h) { String query = "INSERT INTO veiculo (dados) VALUES(@dados)"; try { SqlConnection conexao = new SqlConnection(this.dadosConexao); SqlCommand comando = new SqlCommand(query, conexao); comando.Parameters.Add("@dados", SqlDbType.Text); comando.Parameters["@dados"].Value = h.getJsonRastreio(); comando.Connection.Open(); int rows = comando.ExecuteNonQuery(); //numero de linhas afetadas pela query comando.Dispose(); conexao.Close(); if (rows <= 0) { X9.OQueRolouNaParada(1, query, dadosConexao, null); } if (!Ambiente.isProduction()) //modo verboso ativo fora de produção. (spam info) { X9.ShowInfo(4, h.getJsonRastreio()); } } catch (Exception e) { if ( e.Message.Equals("Invalid object name 'veiculo'.") && !Ambiente.isProduction() && errorCount == 0 ) { errorCount++; CreateTable(); // SYNC DE ORM É PARA OS FRACOS! Aqui o sistema é bruto. salvaHistorico(h); // caberia um goto aqui fácil.. mas vamos de recursão. } else { if (e.Message.Equals("Invalid object name 'veiculo'.")) { X9.OQueRolouNaParada(2, this.dadosConexao, null, null); } else { X9.OQueRolouNaParada(3, e.Message, this.dadosConexao, null); } } } }
static void Main(string[] args) { ConnectionFactory factory; IConnection connection; IModel channel; String queueName; Console.Clear(); if (Ambiente.isProduction()) //modo de produção, saída mínima de texto no terminal. { try { factory = new ConnectionFactory() { HostName = RMQHost }; connection = factory.CreateConnection(); channel = connection.CreateModel(); channel.ExchangeDeclare(exchange: RMQTopic, type: "topic", durable: true); queueName = channel.QueueDeclare(RMQChannel).QueueName; channel.QueueBind(queue: queueName, exchange: RMQTopic, routingKey: RMQKey); X9.ShowInfo(1, null); EventingBasicConsumer consumidorEventos = new EventingBasicConsumer(channel); consumidorEventos.Received += (model, ea) => { byte[] body = ea.Body; String message = Encoding.UTF8.GetString(body); Historico h = new Historico(); h.setJsonRastreio(message); dao.salvaHistorico(h); }; channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumidorEventos); } catch (Exception e) { X9.OQueRolouNaParada(e, 1); } } else //fora do ambiente de produção. SPAM INFO rola solto { try { factory = new ConnectionFactory() { HostName = RMQHost }; connection = factory.CreateConnection(); channel = connection.CreateModel(); channel.ExchangeDeclare(exchange: RMQTopic, type: "topic", durable: true); queueName = channel.QueueDeclare(RMQChannel).QueueName; channel.QueueBind(queue: queueName, exchange: RMQTopic, routingKey: RMQKey); X9.ShowInfo(2, null); EventingBasicConsumer consumidorEventos = new EventingBasicConsumer(channel); consumidorEventos.Received += (model, ea) => { byte[] body = ea.Body; String message = Encoding.UTF8.GetString(body); X9.ShowInfo(3, message); Historico h = new Historico(); h.setJsonRastreio(message); dao.salvaHistorico(h); }; channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumidorEventos); } catch (Exception e) { X9.OQueRolouNaParada(e, 1); } } }