2017-08-18 16 views
0

Je travaille avec signalR. La fonctionnalité de groupe ne fonctionne pas correctement.SignalR travail avec les groupes ne fonctionne pas correctement

Ici, il est mon hub:

public class BasketHub : Hub 
{ 
    public void Login(int companyId) 
    { 
     string groupName = "company" + companyId; 

     IHubContext context = GlobalHost.ConnectionManager.GetHubContext<BasketHub>(); 

     context.Groups.Add(Context.ConnectionId, groupName); 
    } 

    public void Logout(int companyId) 
    { 
     string groupName = "company" + companyId; 

     IHubContext context = GlobalHost.ConnectionManager.GetHubContext<BasketHub>(); 

     context.Groups.Remove(Context.ConnectionId, groupName); 
    } 
} 

Ici, il utilise côté serveur:

public void OrderConfirm(OrderConfirmModel orderConfirmModel) 
    { 
     IHubContext context = GlobalHost.ConnectionManager.GetHubContext<BasketHub>(); 

     var groupName = "company" + orderConfirmModel.CompanyId; 

     context.Clients.Group(groupName).orderConfirm(orderConfirmModel.DidNewOrder); 

     context.Clients.Group(groupName).newOrderCount(orderConfirmModel.DidNewOrder); 

     context.Clients.Group(groupName).didGetNotification(orderConfirmModel.BasketId); 
    } 

Ici, il est client:

 $(function() { 
     var basketHub = $.connection.basketHub; 

     basketHub.client.newOrderCount = function (isNewOrder) { 
      // some code 
     } 

     basketHub.client.didGetNotification = function (basketId) { 
      // some code 
     } 

     basketHub.client.orderConfirm = function (isNewOrder) { 
      // some code 
     } 

     $.connection.hub.start(); 
    }); 

Ici, il est un groupe ajouter et supprimer des clients:

$(function() { 
    var basketHub = $.connection.basketHub; 

    $.connection.hub.start().done(function() { 
     basketHub.server.login($scope.Company.Id); 

     $('#logoutBtn').click(function() { 
      basketHub.server.logout($scope.Company.Id); 
     }); 
    }); 

    $(window).bind('beforeunload', function (e) { 
     basketHub.server.logout($scope.Company.Id); 
    }); 
}); 

J'ai créé le groupe sur le contexte BasketHub. Cependant, quand j'essaie d'utiliser ce groupe, je ne l'atteins pas. Et il n'y a pas de notifications déclenchées du côté client.

Je peux l'utiliser comme ci-dessous:

context.Clients.All.orderConfirm(orderConfirmModel.DidNewOrder); 
context.Clients.All.newOrderCount(orderConfirmModel.DidNewOrder); 
context.Clients.All.didGetNotification(orderConfirmModel.BasketId); 

Cordialement.

+0

Pouvez-vous confirmer que sur le débogage, vous avez pu voir le login se produire avec le connectionId ajouté dans le groupe avec un COMPANYID et dans la méthode OrderConfirm, vous obtenez le même COMPANYID? Aussi, si la méthode OrderConfirm est dans le Hub ou dans un autre contrôleur MVC ou API? – KRoy

+0

Ouais même companyId. Confirmé. –

Répondre

0

J'ai trouvé une solution. Ecrivez un contrôleur angulaire qui exécute init chaque chargement de page (comme layout-controller). Je définis ici mon hub et j'émets des fonctions. Les groupes SingnalR fonctionnent bien.

$(function() { 
    var basketHub = $.connection.basketHub; 

    basketHub.client.orderConfirm = function (isNewOrder) { 
     $rootScope.$emit("basketOrderConfirm", isNewOrder); 
    } 

    basketHub.client.newOrderCount = function (isNewOrder) { 
     $rootScope.$emit("newOrderCount", isNewOrder); 
    } 

    basketHub.client.didGetNotification = function (basketId) { 
     $rootScope.$emit("didGetNotification", basketId); 
    } 

    $.connection.hub.start().done(function() { 
     basketHub.server.login($scope.Company.Id); 

     $('#logoutBtn').click(function() { 
      basketHub.server.logout($scope.Company.Id); 
     }); 
    }); 

    $(window).bind('beforeunload', function (e) { 
     basketHub.server.logout($scope.Company.Id); 
    }); 
});