リアルタイム通知のために 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;
}
}
}
}
}
}]);