Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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>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!");
}
}
Quando diz vb.net, é aplicação web ?