2017-01-02 3 views
0

Ich habe Winkel Dienst, wo ich Methoden bekam, die vom Server aufgerufen werden, wenn Benutzer eine Verbindung herstellen oder trennen von meiner appAngular-Client mit signalR Service nicht Feuer Controller-Methode

(function() { 
//'use strict'; 
app.service('PrivateChatService', ['$rootScope', '$location', function PrivateChatService($rootScope, $location){ 
    var online_users = []; 
    var proxy = $.connection.chatHub; 

    return { 
     addOnlineUser: 
      proxy.client.newOnlineUser = function (user) { 
        var newUser = ({ 
         connectionId: user.ConnectionId, 
         UserName: user.UserName 
        }); 
        online_users.push(newUser); 
        $.connection.hub.start() 
      }, 

      removeOfflineUser: proxy.client.onUserDisconnected = function (id, user) { 
       var index = 0; 
       //find out index of user 
       angular.forEach(online_users, function (value, key) { 
        if (value.connectionId == id) { 
         index = key; 
        } 
       }) 
       online_users.splice(index, 1); 
       $.connection.hub.start() 
      }, 

     } 
}])})(); 

Hier bekam ich Controller-Methode, die ich sein will wenn sie abgefeuert Server ruft newOnlineUser

PrivateChatService.newOnlineUser(function (user) { 
     $scope.online_users.push(newUser); 
     console.log("newOnlineUser finished"); 
    }); 

Also meine Frage ist. Ist es möglich, mit generierten Proxy zu machen, oder ich muss nicht generierten Proxy-Zugriff auf die Methoden verwenden, mit denen ich nicht sehr vertraut bin.

Mit generierten Proxy, wie ich oben zeige es nie meine Controller-Methode erreichen, dass meine Daten in Steuerungsbereich aktualisiert

Antwort

0

Da niemand antwortete, was ich finde irgendwie seltsam. Ich habe herausgefunden, dass das funktioniert. Ich bin mir nicht sicher, ob das ein guter Ansatz ist, da niemand geantwortet hat und ich keine Information gefunden habe, wie das gelöst werden sollte.

app.service('PrivateChatService', ['$rootScope', '$location', function PrivateChatService($rootScope, $location){ 
    var online_users = [];   
    var connection = $.hubConnection(); 
    var proxy = connection.createHubProxy('chatHub'); 

    function signalrCall(eventName, callback) { 
     proxy.on(eventName, function (user) { 
      var args = arguments; 
      $rootScope.$apply(function() { 
       callback.apply(proxy, args) 
      }) 
     }); 
     connection.start(); 
    } 
    return { 
     addOnlineUser: function (eventName, callback) { 
      signalrCall(eventName, callback);    
     }, 

     getActiveUsers: function (eventName, callback) { 
      signalrCall(eventName, callback); 
     }, 

     removeOfflineUser: function (eventName, callback) { 
      signalrCall(eventName, callback); 
     } 
    } 
}]) 

Winkelregler Methoden

PrivateChatService.addOnlineUser("newOnlineUser", function (user) { 
     var newUser = ({ 
      connectionId: user.ConnectionId, 
      UserName: user.UserName 
     }); 

     $scope.online_users.push(newUser); 
     console.log("newOnlineUser finished"); 
    }); 

    PrivateChatService.getActiveUsers("getOnlineUsers", function (onlineUsers) {  
     angular.forEach($scope.online_users, function (scopeValue, scopeKey) { 
      //loop through received list of online users from server 
      angular.forEach(onlineUsers, function (serverListValue, serverListKey) { 
       if (!(serverListValue.ConnectionId == scopeValue.connectionId)) { 
        var newUser = ({ 
         connectionId: serverListValue.ConnectionId, 
         UserName: serverListValue.UserName 
        }); 
        $scope.online_users.push(newUser); 
       } 
      }) 
     }) 
     console.log("getOnlineUsers finished"); 
    }); 

    PrivateChatService.removeOfflineUser("onUserDisconnected", function (user) { 
      var index = 0; 
      //find out index of user 
      angular.forEach($scope.online_users, function (value, key) { 
       if (value.connectionId == user) { 
        index = key; 
       } 
      }) 
      $scope.online_users.splice(index, 1); 
    });