mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-02-05 06:09:57 +01:00
This is because we don't use the cluster module, so the master nodejs process doesn't know about any of the clients through the socket API.
55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
var Client = {
|
|
sendMessage: function (channel, message) {
|
|
process.send({
|
|
action: 'socket.io',
|
|
channel: channel,
|
|
message: message,
|
|
});
|
|
},
|
|
trigger: function (channel, message) {
|
|
Client.message.concat(Client.pmessage).forEach(function (callback) {
|
|
setImmediate(function () {
|
|
callback.call(Client, channel, message);
|
|
});
|
|
});
|
|
},
|
|
publish: function (channel, message) {
|
|
Client.sendMessage(channel, message);
|
|
},
|
|
// we don't actually care about which channels we're subscribed to
|
|
subscribe: function () {},
|
|
psubscribe: function () {},
|
|
unsubscribe: function () {},
|
|
unpsubscribe: function () {},
|
|
message: [],
|
|
pmessage: [],
|
|
on: function (event, callback) {
|
|
if (event !== 'message' && event !== 'pmessage') {
|
|
return;
|
|
}
|
|
Client[event].push(callback);
|
|
},
|
|
off: function (event, callback) {
|
|
if (event !== 'message' && event !== 'pmessage') {
|
|
return;
|
|
}
|
|
if (callback) {
|
|
Client[event] = Client[event].filter(function (c) {
|
|
return c !== callback;
|
|
});
|
|
} else {
|
|
Client[event] = [];
|
|
}
|
|
},
|
|
};
|
|
|
|
process.on('message', function (message) {
|
|
if (message && typeof message === 'object' && message.action === 'socket.io') {
|
|
Client.trigger(message.channel, message.message);
|
|
}
|
|
});
|
|
|
|
module.exports = Client;
|