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(); } }
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; } }
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); }
public void DevolverDados(RespostaRequisicaoSql respostaJSON) { this.Clients.All.ExibeResultado(respostaJSON); }
public static string SerializaRespostaRequisicaoSql(RespostaRequisicaoSql resposta) { return(JsonConvert.SerializeObject(resposta, Formatting.Indented)); }