2016-05-05 5 views
0

Ich rufe eine clientseitige Methode vom Server auf, die im Wesentlichen ein JavaScript-Bestätigungsdialog ist. Wenn der Kunde die Cancel Taste auf dem Dialog klickt ich ihre Token aus dem lokalen Speicher löschen möchte (im Wesentlichen Protokollierung sie aus) ...SignalR - Zurückgeben einer Clientantwort an den Server

sessionStorage.removeItem('access-token'); 

Wenn der Kunde klickt auf die Schaltfläche OK ich auf ein, das gleiche tun will anderer Client (Ich habe die ConnectionId dieses Clients auf der Serverseite gespeichert). Also muss der Server wissen, welche Option der Client gewählt hat (OK oder Cancel).

Wie würde ich gehen über die Wahl des Clients und übergibt es zurück an den Server, so dass der Server könnte das "Logout" Javascript auf dem richtigen Client aufrufen?

+0

War meine Antwort etwas, das Sie gesucht haben, oder waren Sie für eine andere Implementierung suchen? –

Antwort

1

Ich denke, Sie haben ein paar Möglichkeiten.

Sie können eine Nachricht zurück an die Hub senden, sobald der Benutzer auf eine Schaltfläche geklickt hat.

Hub

[HubName("message")] 
public class MessageHub : Hub 
{ 
    public void sendmessage(bool logout) 
    { 
     Clients.Caller(????).logoutuser(logout); //However you identify who to logout?? 
    } 
} 

Kunde

var hub = $.connection.message; 

hub.client.logoutuser = function(message) { 
    if (message.logout = true) { 
     sessionStorage.removeItem('access-token'); 
    } 
} 

hub.server.sendmessage(true); //result of the user's click OK -> True, Cancel -> False 

$.connection.hub.start().done(function() { }); 

Oder Sie könnten eine API-Hit, der die Verbindung für einige bekommt? Benutzer, den Sie abmelden möchten.

API

[RoutePrefix("api/messaging")] 
public class MessagingController : ApiController 
{ 
    [Route("")] 
    public void Post(Message message) 
    { 
     var notificationHub = GlobalHost.ConnectionManager.GetHubContext<MessageHub>(); 
     if (notificationHub != null) 
     { 
      try 
      { 
       notificationHub.Clients.User(message.UserName).logoutuser(message); 
      } 
      catch (Exception ex) 
      { 
      } 
     } 
    } 
} 

Kunde

function notifyController(responseObj) { 

$.ajax({ 
     url: '/api/Messaging/', 
     type: 'POST', 
     data: responseObj, // some object containing the users response information? 
     success: function (data) { return; }, 
     error: function (ex) { return; } 
    }); 
} 
Verwandte Themen