2017-01-02 10 views
0

У меня есть угловой сервис, где я получил методы, которые вызываются с сервера, когда пользователь подключением или отключением от моего приложенияУгловая клиент с signalR службы не пожарный контроллером методом

(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() 
      }, 

     } 
}])})(); 

Здесь я получил метод контроллера, который я хочу быть при вызове сервера newOnlineUser

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

Так что мой вопрос. Можно ли создать сгенерированный прокси-сервер, или я должен использовать не сгенерированный прокси-доступ к тем методам, с которыми я не очень хорошо знаком.

С сгенерированного прокси, как я показываю выше он никогда не достигнет моего метода контроллера, чтобы обновить свои данные в области контроллера

ответ

0

Поскольку никто не ответил, что я нашел как-то странно. Я узнал, что это работает. Я не уверен, что это хорошо, потому что никто не ответил, и я не нашел никакой информации о том, как это должно быть разрешено.

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); 
     } 
    } 
}]) 

угловые методы контроллера

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); 
    });