Ir para conteúdo
AndréCJ

SignalR pegar lista de usuários e adicionar a um listview (VB.net)

Recommended Posts

Olá pessoal,

Sou novato em SignalR e estou com uma grande dúvida,  como faço para pegar a lista de usuários on-line de um servidor SignalR/C# com um cliente em VB.net?

Utilizando javascript consigo pegar a lista normalmente porem não estou conseguindo criar o mesmo código em VB.net.

Alguém poderia me ajudar por favor?

 

Função que disponibiliza a lista no servidor:

 

 public bool SendOnlineContacts()
        {
            try
            {
                OnlineContacts onlineContacts = new OnlineContacts();
                foreach (var item in _chatUsers.OrderByDescending(a => a.Value.data))
                {
                    onlineContacts.messageRecipients.Add(item.Value);
                }
                Clients.All.onGetOnlineContacts(onlineContacts);
                return false;
            }
            catch (Exception)
            { 
                throw new InvalidOperationException("Problem in getting contacts!");
            }
        }

 

-------------------------------------------------------------------------

 

Código em ASP:

<script type="text/javascript">
        var Server;
        $(document).ready(function () {

            Server = $.connection.ChatHub;

            $.connection.hub.start({ transport: 'auto', waitForPageLoad: true }, function () {
                Server.server.connect("0123456", "Deu Certo!!!").fail(function (e){
                });
            });


            Server.client.onGetOnlineContacts = function (chatUsers) {

                ShowTable(chatUsers, Server);
            };

        });

        function ShowTable(chatUsers, Server) {

            console.log(chatUsers.messageRecipients);

            if ($("#ListaUsuariosOnline").length) {

                var html = "<table cellspacing='0' cellpadding='5' align='Center' style='font-size:10px; width=1024px;'>";
                html += "<tr style='font-size:10px;'>";
                html += "<th style='font-size:10px;'>Usuário ID</th><th style='font-size:10px;'>Nome/CPF</th><th style='font-size:10px;'>Filial</th><th style='font-size:10px;'>Página atual</th><th style='font-size:10px;'>Navegador</th><th style='font-size:10px;'>Data/Hora</th><th style='font-size:10px;'>Ações</th>";
                html += "</tr>";

                $.each(chatUsers.messageRecipients, function (index, value) {

                    html += "<tr>";
                    html += "<td>" + $(this)[0].messageRecipientId + "</td><td>" + $(this)[0].messageRecipientName + "</td><td>" + $(this)[0].data + "</td><td><input type='button' value='Enviar Msg' onclick=\"Server.server.enviacomando(prompt('Enviar mensagem à " + $(this)[0].messageRecipientName + "', ''), '" + $(this)[0].messageRecipientId + "', 'msg');\" class='btn cancel'> <input type='button' class='btn cancel' value='Enviar Commando' onclick=\"Server.server.enviacomando(prompt('Enviar comando à " + $(this)[0].messageRecipientName + "', ''), '" + $(this)[0].messageRecipientId + "', 'comando');\"></td>";
                    html += "</tr>";
                });

                html += "</table>";

                var len = $.map(chatUsers.messageRecipients, function (n, i) { return i; }).length;

                $("#ListaUsuariosOnlineTotal").html(len);
                $("#ListaUsuariosOnline").html(html);

            }

        }

    </script>

 

Editado por quintelab
Adicionado BBCode

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, é Windows Form.

O sistema funciona da seguinte forma:

Temos vários clientes que se conectam ao Hub e um desses clientes é o Manager criado em VB.net. O Manager será responsável em exibir as informações sobre os clientes. Uma dessas informações é mostrar na tela uma lista com todos os clientes que estão on-line através de um listbox ou listview

 

Consigo pegar essa lista utilizando uma página ASP/Javascript conforme o código que mostrei. Porem gostaria de ter essa mesma lista no Manager.

 

Em outras palavras : não estou conseguindo transcrever o código da página ASP/Javascript para o Manager/Vb.net que é pegar a lista gerada por esta função abaixo que está em meu Hub.

[Serializable]
    public class MessageRecipient
    {
        public MessageRecipient()
        {
            chatRoomIds = new List<string>();
        }
        public string messageRecipientId { get; set; }
        public string messageRecipientName { get; set; }
        public string connectionId { get; set; }
        public DateTime data { get; set; }
        public List<string> chatRoomIds { get; set; }
    }

    [Serializable]
    public class OnlineContacts
    {
        public List<MessageRecipient> messageRecipients { get; set; }
        public OnlineContacts()
        {
            messageRecipients = new List<MessageRecipient>();
        }
    }

public bool SendOnlineContacts()
        {
            try
            {
                OnlineContacts onlineContacts = new OnlineContacts();
                foreach (var item in _chatUsers.OrderByDescending(a => a.Value.data))
                {
                    onlineContacts.messageRecipients.Add(item.Value);
                }
                Clients.All.onGetOnlineContacts(onlineContacts);
                return false;
            }
            catch (Exception)
            { 
                throw new InvalidOperationException("Problem in getting contacts!");
            }
        }

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por drapn
      Boa tarde pessoal
      Estou com um projeto em Vb.Net que consiste em importar dados de uma planilha de Excel para um Datagridview.
      O projeto esta funcionando tudo ok porem notei que quando vou movendo as barras laterais e inferiores o formulário apresenta grande lentidão para mover as colunas etc...
      Fiz o teste criando um projeto novo com somente 1 Form, 1 Datagrid e 1Botão e os códigos para fazer a importação e quando eu "populo" o datagridview com o conteudo ele apresenta esses legs.
       
      Alguem a ja passou por isso?
      Será que é configuração da máquina? (Não é uma máquina tão fraca)
      O Vb.NET é a versão 2015
       
       
      Os arquivos de Excel variam de 80 Linhas por 5 Colunas á 400 linhas e 5 colunas
       
      O código é esse:
       
      Sub ImportaEstoque()         Dim Local         Local = EndArquivo()         If String.IsNullOrWhiteSpace(Local) Then             MessageBox.Show("Nenhum arquivo foi selecionado.", "Informação.", MessageBoxButtons.OK, MessageBoxIcon.Information)             Return         End If         '------------------------------         Dim caminhoArquivoExcel As String = Local         Dim nomePlanilhaExcel As String = "ESTQ" & "$"         Dim conexaoOleDb As OleDbConnection = Nothing         Dim ds As DataSet         Dim cmd As OleDbDataAdapter         '------------------------------         Try             'conexaoOleDb = New OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Local & ";Extended Properties=Excel 8.0;")             conexaoOleDb = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & Local & ";Extended Properties='Excel 8.0;HDR=Yes'")             'cmd = New OleDbDataAdapter("Select * from [" & nomePlanilhaExcel & "]", conexaoOleDb)             cmd = New OleDbDataAdapter("Select * from [" & nomePlanilhaExcel & "]  Where UM Like '%" & "PC" & "%'", conexaoOleDb)             cmd.TableMappings.Add("Table", "tabelaExcel")             ds = New DataSet             cmd.Fill(ds)             dgvDados.DataSource = ds.Tables(0)         Catch ex As Exception             MessageBox.Show(ex.ToString, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)         Finally             conexaoOleDb.Close()         End Try         sbQtdItens.Text = "Encontrados " & dgvDados.RowCount.ToString & " itens."     End Sub  
       
       
      Pessoal desde já muito obrigado pela força!
    • Por eduardohaag
      Olá estou criando um sistema onde preciso calcular a previsão de envio do pedido em dias uteis, para isso estou usando um webservice gratuito que retorna um xml, porém estou tendo o erroSystem.XML.XmlException: 'Dados no nível raiz inválidos. Linha 1, posição 1.'
       
      Meu código é 
      Sub Preenchedata() Dim sql = "SELECT PrazoPadraoProducao FROM Configuracoes" Dim dr As DataTable = AcessoDB.ExecutarComando(sql, CommandType.Text, Nothing, AcessoDB.TipoDeComando.ExecuteDataTable) Dim ds As New DataSet Dim xml As String = "https://elekto.com.br/api/Calendars/br-BC/Add?initialDate=" & Now.Year & "-" & Now.Month & "-" & Now.Day & "&days=" & dr.Rows(0).Item(0) & "&type=work" ds.ReadXml(xml)  
      e o xml retornado é 
       
      <dateTime xmlns="http://schemas.microsoft.com/2003/10/Serialization/">2019-05-03T00:00:00Z</dateTime>  
      Alguém tem alguma ideia de como posso eliminar o erro?
    • Por lindomar55
      ola amigos preciso de uma ajudinha, estou montando uma aplicaçao usando vb.net windows forms. nela tenho um botao onde chamo uma url no chrome com o seguinte comando.
      Private Sub Btn_abrir_site_Click(sender As Object, e As EventArgs) Handles Btn_abrir_site.Click
              Dim url As String = “https://www.rico.com.você/dashboard/tesouro-direto/“
              Process.Start(url)
          End Sub
      no google entao eu acesso com meu logim manualmente(prefiro assim). e em realizo uma serie de operaçoes, chega um determinado momento que preciso passar passar os dados que o site me apresenta entao(apos as operaçoes) para o aplicativo. ai é que esta o problema. neste ponto estou boiando.
      no codigo abaixo por exemplo: precisava obter os valores 12,36 e 8806,84 de forma automatica e colocar em textbox.
      vi exemplos na net que mostram com webbrowser porem eu prefiro que seja com o chrome. e nesses exemplos ele abre a pagina e ja obtem os dados. eu preciso trabalhar na pagina muiiiito e so depois baixar os dados programaticamente.
      qualquer ajuda sera bem vinda....
       

    • Por igadino
      Boa Tarde pessoal eu peguei esta função no link abaixo parece que e em C# e transformei em vb.net só que esta dando o erro na linha em destaque
      https://github.com/BoletoNet/boletonet/blob/master/src/Boleto.Net.MVC/Models/Exemplos.cs

      Public Sub GeraBoletoCE(ByVal qtde As Integer)
              ' Cria o boleto, e passa os parâmetros usuais
              Dim ce As BoletoBancario
              Dim boletos As New List(Of BoletoBancario)()
              For i As Integer = 0 To qtde - 1
                  ce = New BoletoBancario()
                  ce.CodigoBanco = _codigoBanco
                  Dim vencimento As New DateTime(2007, 9, 10)
                  Dim instr As New Instrucao(1)
                  Dim c As New Cedente("00.000.000/0000-00", "Next Consultoria Ltda.", "0123", "100618", "9")
                  c.Codigo = 112233
                  ' BoletoNet.Boleto b = new BoletoNet.Boleto(vencimento, 20.00m, "14", "0123456789", c);
                  Dim b As New Boleto(vencimento, 2952.95, "14", "0123456789", c)
                  b.NumeroDocumento = "21212114779797" '1b.NossoNumero
                  b.Sacado = New Sacado("000.000.000-00", "Jose Pedro Ongueira de Oliveira")
                  b.Sacado.Endereco.[End] = "Rua Dr. Henrique Portugal, 12"
                  b.Sacado.Endereco.Bairro = "Loteamento Lago Sul"
                  b.Sacado.Endereco.Cidade = "Palmas"
                  b.Sacado.Endereco.CEP = "77062141"
                  b.Sacado.Endereco.UF = "TO"
                  b.Sacado.Endereco.Logradouro = "Rua Dr. Henrique Duarte Lima"
                  b.Sacado.Endereco.Numero = "8980978987"
                  b.Sacado.Endereco.Complemento = "Casa"

                  b.NumeroDocumento = "00001"
                  b.DataProcessamento = DateTime.Now
                  b.DataDocumento = DateTime.Now
                  instr.Descricao = "Não Receber após o vencimento"
                  b.Instrucoes.Add(instr)
                  ce.Boleto = b
                  ce.Boleto.Valida()
                  boletos.Add(ce)
              Next
              GeraLayout(boletos)
          End Sub 
    • Por amenum
      Pessoal, tudo bem? Fiquei parado da programação um bom tempo, e agora que retornei, queria dar manutenção nas minhas aplicações web que estão em vb.net webforms. Comprei um template de bootstrap (https://seantheme.com/color-admin-v4.2/admin/html/index_v2.html) e queria controlar os elementos via code behind in vb.net, mas estou sofrendo aqui por conta do meu limitado conhecimento.
       
      Alguém poderia me dar uma luz em base neste link:
      https://seantheme.com/color-admin-v4.2/admin/html/ui_modal_notification.html
       
      Ao clicar na maioria dos botões dessa página, abre um modal ou alert. Pois bem, eu gostaria de simular essa abertura a partir de uma lógica no code behind, por exemplo, em um formulário, caso alguma regra não esteja sendo cumprida. Simples assim.
       
      No código original, temos:
      Chamada:
      <a href="#modal-dialog" class="btn btn-sm btn-success" data-toggle="modal">Demo</a>
       
      Div do modal
      <div class="modal fade" id="modal-dialog" runat="server">
                                      <div class="modal-dialog">
                                          <div class="modal-content">
                                              <div class="modal-header">
                                                  <h4 class="modal-title">Modal Dialog</h4>
                                                  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                                              </div>
                                              <div class="modal-body">
                                                  <p>
                                                      Modal body content here...
                                                  </p>
                                              </div>
                                              <div class="modal-footer">
                                                  <a href="javascript:;" class="btn btn-white" data-dismiss="modal">Close</a>
                                                  <a href="javascript:;" class="btn btn-success">Action</a>
                                              </div>
                                          </div>
                                      </div>
                                  </div>
       
      o que eu preciso?
      No code behind
       
       Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            try
                if verificaCampos() = false then ABRE O MODAL DIV COM A MENSAGEM DE ERRO          
           Catch ex As Exception
                     Throw ex
            end try
          End Sub
       
      Alguém pode me ajudar?
       
      muito obrigado.
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.