【问题标题】:creating angularjs + signalr service创建 angularjs + signalr 服务
【发布时间】:2015-02-24 10:54:23
【问题描述】:

我正在创建一个通用的角度服务,它将执行信号器的本机操作

angular.module('signalr', []).provider('signalrService', [function () {

var configuration;
this.config = function (config) {
    configuration = config;
};

this.$get = ['$log', '$timeout', '$q', '$rootScope', function ($log, $timeout, $q, $rootScope) {
    return new signalrService(configuration, $log, $timeout, $q);
  }];

}])


function signalrService(configuration, $log, $timeout, $q, $rootScope) {



if (!configuration) {
    $log.log('Invalid config');
    return;
}

var signalRhubs = $.hubConnection();


if (!signalRhubs) {
    $log.log('SignalR is not referenced.');
    return;
}

signalRhubs.logging = configuration.logging;



var warmMeUp = signalRhubs.createHubProxy('userHub');


warmMeUp.on('getOnlineUserList', function (data) {
  console.log(data)   
 })




signalRhubs.connectionSlow(function () {
    $log.warn('We are currently experiencing difficulties with the connection.')
});

signalRhubs.error(function (error) {
    $log.error('SignalR error: ' + error)
});




$(signalRhubs).bind("onDisconnect", function (e, data) {
    $timeout(function () {
        $log.warn('Signalr Connection dead.')
    }, 10000);
});


this.invoke = function (hubName, serverFunction, paramObject) {

    var def = $q.defer();


    var hubProxy = signalRhubs.createHubProxy(hubName)

        signalRhubs.start().done(function () {

            if (paramObject) {

                 hubProxy.invoke(serverFunction, paramObject).done(function (data) {

                    def.resolve(data);
                }).fail(function (error) {
                    $log.error('SignalR error: ' + error)
                    def.reject();
                });
            }
            else {
                hubProxy.invoke(serverFunction).done(function (data) {
                    def.resolve(data);
                }).fail(function (error) {
                    $log.error('SignalR error: ' + error)
                    def.reject();
                });
            }
        }).fail(function () {
            $log.error('Failed to start signalR')
            def.reject();
        });

    return def.promise;
}


this.on = function (hubName,clientSubscribeFunction) {
    var def = $q.defer();
    var hubProxy = signalRhubs.createHubProxy(hubName)
        hubProxy.on(clientSubscribeFunction, function (object) {
            def.resolve(object);
        });


    return def.promise;

  }

}

这是我的控制器

app.controller('homeController', ['$scope', 'signalrService', function ($scope, signalrService) {


signalrService.on('userHub', 'getOnlineUserList').then(function (userList) {
    console.log(userList);
});

signalrService.invoke('userHub', 'getOnlineUsers')




}]);

这里的问题是当我在服务中取消注释我的“warmUp.on”代表时,通用“on”(this.on)和“warmUp.on”都被执行,但是当我评论“warmUp.on”时,通用(this.on) 委托也未执行。 请帮我解决这个问题

【问题讨论】:

    标签: angularjs signalr


    【解决方案1】:

    更新:现在托管在 github https://github.com/pranaydutta89/angular-signalr-service

    我不知道如何,但这对我有用,我现在首先预热每个集线器的一个功能,然后我的代表为我工作

    angular.module('signalr', []).provider('signalrService', [function () {
    
    var configuration;
    this.config = function (config) {
        configuration = config;
    };
    
    this.$get = ['$log', '$timeout', '$q', '$rootScope', function ($log, $timeout, $q, $rootScope) {
        return new signalrService(configuration, $log, $timeout, $q);
      }];
    
    }])
    
    
    function signalrService(configuration, $log, $timeout, $q, $rootScope) {
    
    if (!configuration) {
        $log.log('Invalid config');
        return;
    }
    
    var signalRhubs = $.hubConnection();
    
    
    if (!signalRhubs) {
        $log.log('SignalR is not referenced.');
        return;
    }
    
    signalRhubs.logging = configuration.logging;
    
    
    angular.forEach(configuration.register, function (key,value) {
    
    
        var x = signalRhubs.createHubProxy(key.hub);
    
        x.on(key.method, function (data) {
            console.log(data)
        });
    })
    
    
    
    
    
    signalRhubs.connectionSlow(function () {
        $log.warn('We are currently experiencing difficulties with the connection.')
    });
    
    signalRhubs.error(function (error) {
        $log.error('SignalR error: ' + error)
    });
    
    
    
    
    $(signalRhubs).bind("onDisconnect", function (e, data) {
        $timeout(function () {
            $log.warn('Signalr Connection dead.')
        }, 10000);
    });
    
    
        this.invoke = function (hubName, serverFunction, paramObject) {
    
        var def = $q.defer();
    
        var hubProxy = signalRhubs.createHubProxy(hubName)
    
            signalRhubs.start().done(function () {
    
                if (paramObject) {
    
                     hubProxy.invoke(serverFunction, paramObject).done(function (data) {
    
                        def.resolve(data);
                    }).fail(function (error) {
                        $log.error('SignalR error: ' + error)
                        def.reject();
                    });
                }
                else {
                    hubProxy.invoke(serverFunction).done(function (data) {
                        def.resolve(data);
                    }).fail(function (error) {
                        $log.error('SignalR error: ' + error)
                        def.reject();
                    });
                }
            }).fail(function () {
                $log.error('Failed to start signalR')
                def.reject();
            });
    
    
    
        return def.promise;
    }
    
    
    this.on = function (hubName,clientSubscribeFunction) {
        var def = $q.defer();
    
           var hubProxy = signalRhubs.createHubProxy(hubName)
            hubProxy.on(clientSubscribeFunction, function (object) {
                def.resolve(object);
            });
    
           return def.promise;
    
      }
    
    }
    

    @angular 配置

    .config(['signalrServiceProvider', function (signalrProvider) {
     //register single function of each hub to warm him up
    signalrProvider.config({
        logging: true,
        register: [{
            hub: 'warmHub',
            method : 'hello'
        }, {
            hub: 'userHub',
            method: 'method2client'
        }],
    
        })
    
     }]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      相关资源
      最近更新 更多