当有新客户端连接上来时广播通知所有其他客户端;
当有客户端关闭时也通知给其他客户端并且从广播列表中移除。
/**
* Created by tujiaw on 15/8/14.
*/
// 广播消息
var events = require('events');
var net = require('net');
var channel = new events.EventEmitter();
channel.clients = {};
channel.subscriptions = {};
channel.on('join', function(id, client) {
this.clients[id] = client;
this.subscriptions[id] = function(senderId, message) {
if (id != senderId) {
this.clients[id].write(message);
}
}
this.on('broadcast', this.subscriptions[id]);
client.write('welcome, total:' + this.listeners('broadcast').length);
});
channel.on('leave', function(id) {
channel.removeListener('broadcast', this.subscriptions[id]);
channel.emit('broadcast', id, id + ' is leave!');
});
var server = net.createServer(function(client) {
var id = client.remoteAddress + ':' + client.remotePort;
channel.emit('join', id, client);
client.on('data', function(data) {
data = data.toString();
channel.emit('broadcast', id, data);
});
client.on('close', function() {
channel.emit('leave', id);
})
});
server.listen(8888);