2016-12-01 4 views
0

Je travaille avec SignalR & MVC. Le code que j'ai cherché en fait connecte l'utilisateur au concentrateur au démarrage.Connexion avec SignalR après connexion ou connexion différée avec SignalR

[assembly: OwinStartup(typeof(Uno.Hubs.Startup))] 

namespace ChatTBox 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888 
      app.MapSignalR(); 
     } 
    } 


} 

Cependant, je dois l'utilisateur de se connecter à SignalR après avoir connecté avec succès puis conserver et afficher la liste de connectés signée à l'utilisateur. Comment faire ça?

Répondre

0

Cet appel ne connecte pas l'utilisateur au concentrateur, il enregistre simplement le middleware SignalR (de la même manière que vous appelez app.UseWebApi()). La connexion d'un utilisateur est initiée par le client à partir du client.

Vous pouvez connecter un client après la connexion du client. L'exemple sur asp.net peut être modifié pour convenir à:

// login 
// assuming your hub is called ChatTBoxHub 
var chatTBoxHubProxy = $.connection.contosoChatHub; 
// wire up the event the server can call on the client 
chatTBoxHubProxy.client.addMessageToPage = function (name, message) { 
    console.log(name + ' ' + message); 
}; 
// start the signalR connection 
$.connection.hub.start().done(function() { 
    // Wire up Send button to call NewContosoChatMessage on the server. 
}); 

// For .Net clients: 
var hubConnection = new HubConnection("http://yourUrl/"); 
IHubProxy chatTBoxHubProxy = hubConnection.CreateHubProxy("ChatTBoxHub"); 
chatTBoxHubProxy.On<Message>("addMessageToPage", message => Console.WriteLine("Message '{0}' received from {1}", message.Body, message.Name)); 
await hubConnection.Start(); 
+0

Ok ce que j'ai compris que je devrais créer la connexion et l'appeler après que l'utilisateur s'est connecté avec succès sur le portail. Mais comment gérer les appels aux expéditeurs individuels plutôt que la diffusion de masse? – Salman

+0

Dans votre classe de concentrateur sur le serveur, remplacez les événements OnConnected, OnDisconnected, conservez une collection statique d'identifiants de connexion par rapport à l'ID utilisateur approprié. J'ai utilisé un dictionnaire statique de connexion Id aux noms d'utilisateur à des fins similaires. Avec cela en place, vous ajoutez/supprimez un utilisateur en utilisant la propriété Context.ConnectionId dans le Hub, ce qui vous permet d'utiliser l'ID de connexion lors de l'envoi à un client: Clients.Client (connectionId) .addMessageToPage (nom, msg). – reckface