0

リアルタイム通知のために socket.io に依存するアプリを作成しています。redis メッセージが発行されたときにトリガーされるリスナーがあります。この redis リスナーはグローバルである必要があり、データはプロバイダーに押し込まれてコントローラー間で共有される必要があります。だから、私がやっていることは、リスナーを設定するために通知プロバイダーを作成し、ソケットプロバイダーを注入することです。ただし、socke プロバイダーが定義されていても、on() は定義されていません。アプリの構成中にこれを達成できる方法はありますか? それとも私はここで空中で撃っているだけですか?ありがとう

var CRM = angular.module('CRM', ['ngRoute', 'ngResource']);
CRM.config(['socketProvider',function(socket) {
    socket.connect();
}]);

CRM.config(['notificationsProvider',function(not) {
    not.listen();
}]);

CRM.provider('socket', function() {
var socket;
return {
    connect: function() {
        // var host = ''; // Production
        var host = 'http://localhost:3000'; // Dev
        socket = io.connect(host);
        var client = {
            clientType: 'Browser',
            registerFor: ['peberry.*']
        };
        socket.emit('register', client);
    },
    $get: function($rootScope) {
        return {
             on: function(event, callback) {
                socket.on(event, function() {
                    var args = arguments;
                    $rootScope.$apply(function () {
                        callback.apply(socket, args);
                    });
                });
            },
            emit: function(event, data, callback) {
                socket.emit(event, data, function() {
                    var args = aguments;
                    $rootScope.$apply(function() {
                        if (callback) {
                            callback.apply(socket, args);
                        }
                    });
                });
            }
        }
    }
}
});

CRM.provider('notifications',['socketProvider','redisMsgProvider', function(socket, redisMsg) {
var notifications = [];
return {
    listen: function() {
        console.log(socket.on)
        socket.on('redis', function(msg) {
            redisMsg.processRedis(msg);
            var message = redisMsg.getMessage();
            console.log(message);
        });
    },
    $get: function() {
        return {
            getNotifications: function(action) {
                if (notifications.length > 0) {
                    return notifications;
                }
            }
        }
    }
}
}]);
4

0 に答える 0