public ActionResult Broadcast(Models.Index dados)
        {
            string                retorno        = string.Empty;
            var                   hub            = GlobalHost.ConnectionManager.GetHubContext <Hubs.BroadcastHub>();
            var                   hubConnection  = new HubConnection("http://localhost:54132/");
            IHubProxy             serverHub      = hubConnection.CreateHubProxy("BroadcastHub");
            DateTime              startBroadcast = DateTime.Now;
            RespostaRequisicaoSql resposta;

            try
            {
                resposta = new RespostaRequisicaoSql();

                //Cria o objeto da requisicao
                RequisicaoSql requisicao = Requisicoes.CriarRequisicaoSql(dados.Codigo, dados.Consulta);

                //Serializa a requisicao em JSon para broadcast
                //string requisicaoJSON = Requisicoes.SerializaRequisicaoSql(requisicao);

                //Dispara o broadcast para os clients console
                hub.Clients.All.obterConsulta(requisicao);

                //Fica escutando o evento de retorno que será disparado pelos consoles
                serverHub.On <RespostaRequisicaoSql>("exibeResultado", (resp) =>
                {
                    resposta = resp;
                }
                                                     );

                hubConnection.Start().Wait();

                serverHub.Invoke("Notify", "Controller Call", hubConnection.ConnectionId);

                while (resposta.CodigoRequisicaoSql <= 0)
                {
                    if ((DateTime.Now - startBroadcast).TotalSeconds >= 15)
                    {
                        resposta.MensagemErro = "Time Out";
                        break;
                    }
                }

                //resposta = Requisicoes.DeserializaRespostaRequisicaoSql(retorno);
                if (!(resposta.Retorno == null) && resposta.Retorno.Count > 0)
                {
                    resposta.Retorno[0] = JsonConvert.DeserializeObject <DataTable>(resposta.Retorno[0].ToString());
                }

                return(View(resposta));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                hubConnection.Dispose();
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            string    msg = null;
            DataTable dados;

            var       hubConnection = new HubConnection("http://localhost:54132/");
            IHubProxy serverHub     = hubConnection.CreateHubProxy("BroadcastHub");

            serverHub.On <RequisicaoSql>("obterConsulta", (requisicao) =>
            {
                //RequisicaoSql requisicao = ProcessamentoBroadcast.DeserializaRequisicaoSql(requisicaoJSON);
                if (requisicao.CodigoUsuario == 45)
                {
                    Console.WriteLine($"Horário disparo: {requisicao.DataHoraRequisicao}");
                    Console.WriteLine($"Horário recebimento: {DateTime.Now:G}");
                    Console.WriteLine($"SQL Recebido: {requisicao.ComandoSql}");
                    Console.WriteLine($"Código Requisição: {requisicao.CodigoRequisicao}");
                    Console.WriteLine($"Tipo Consulta: {requisicao.Tipo}");
                    Console.WriteLine($"Parametros:");
                    foreach (var parametro in requisicao.Parametros)
                    {
                        Console.WriteLine($"    Nome: {parametro.Nome}, Valor: {parametro.Valor}, Tipo: {parametro.Tipo}");
                    }

                    RespostaRequisicaoSql resposta = Conexao.ObterDados(requisicao.ComandoSql, requisicao.Parametros);

                    resposta.CodigoRequisicaoSql = requisicao.CodigoRequisicao;
                    resposta.Parametros          = ProcessamentoBroadcast.CriarParametros();

                    serverHub.Invoke("devolverDados", resposta);
                }
            }
                                         );

            hubConnection.Start().Wait();

            serverHub.Invoke("Notify", "Console app", hubConnection.ConnectionId);


            while ((msg = Console.ReadLine()) != null)
            {
                return;
            }
        }
Пример #3
0
        public static RespostaRequisicaoSql ObterDados(string sql, IList <ParametroSql> parametros)
        {
            RespostaRequisicaoSql retorno = new RespostaRequisicaoSql();

            string stringConexao = "Data Source=.\\SQLEXPRESS;Initial Catalog=MaximaSignalR;Integrated Security=SSPI";

            try
            {
                using (SqlConnection conn = new SqlConnection(stringConexao))
                {
                    SqlDataReader dr = null;

                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;

                        foreach (var parametro in parametros)
                        {
                            cmd.Parameters.AddWithValue(parametro.Nome, parametro.Valor);
                        }

                        conn.Open();
                        dr = cmd.ExecuteReader();

                        DataTable dt = new DataTable();
                        dt.Load(dr);

                        retorno.OcorreuErro    = false;
                        retorno.LinhasAfetadas = dr.RecordsAffected;
                        retorno.Retorno.Add(dt);
                    }
                }
            }
            catch (Exception ex)
            {
                retorno.OcorreuErro    = true;
                retorno.LinhasAfetadas = 0;
                retorno.MensagemErro   = ex.Message;
            }

            return(retorno);
        }
Пример #4
0
 public void DevolverDados(RespostaRequisicaoSql respostaJSON)
 {
     this.Clients.All.ExibeResultado(respostaJSON);
 }
Пример #5
0
 public static string SerializaRespostaRequisicaoSql(RespostaRequisicaoSql resposta)
 {
     return(JsonConvert.SerializeObject(resposta, Formatting.Indented));
 }