123 lines
3.6 KiB
JavaScript
123 lines
3.6 KiB
JavaScript
|
// Generated by CoffeeScript 1.8.0
|
||
|
var ChannelManager, WeinreClientEvents, WeinreTargetEvents, channelManager, serviceManager, utils, _;
|
||
|
|
||
|
_ = require('underscore');
|
||
|
|
||
|
utils = require('./utils');
|
||
|
|
||
|
serviceManager = require('./serviceManager');
|
||
|
|
||
|
WeinreClientEvents = null;
|
||
|
|
||
|
WeinreTargetEvents = null;
|
||
|
|
||
|
channelManager = null;
|
||
|
|
||
|
utils.registerClass(ChannelManager = (function() {
|
||
|
function ChannelManager() {
|
||
|
this.channels = {};
|
||
|
}
|
||
|
|
||
|
ChannelManager.prototype.initialize = function() {
|
||
|
WeinreClientEvents = serviceManager.get('WeinreClientEvents');
|
||
|
WeinreTargetEvents = serviceManager.get('WeinreTargetEvents');
|
||
|
if (!WeinreClientEvents) {
|
||
|
utils.exit('WeinreClientEvents service not registered');
|
||
|
}
|
||
|
if (!WeinreTargetEvents) {
|
||
|
return utils.exit('WeinreTargetEvents service not registered');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ChannelManager.prototype.created = function(channel) {
|
||
|
return this.channels[channel.name] = channel;
|
||
|
};
|
||
|
|
||
|
ChannelManager.prototype.destroyed = function(channel) {
|
||
|
var clients, connection, _i, _j, _len, _len1, _ref, _ref1;
|
||
|
if (channel.isClient) {
|
||
|
_ref = channel.connections;
|
||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||
|
connection = _ref[_i];
|
||
|
this.disconnectChannels(channel, connection);
|
||
|
}
|
||
|
} else {
|
||
|
_ref1 = channel.connections;
|
||
|
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
||
|
connection = _ref1[_j];
|
||
|
this.disconnectChannels(connection, channel);
|
||
|
}
|
||
|
}
|
||
|
clients = this.getClientChannels(channel.id);
|
||
|
if (channel.isClient) {
|
||
|
WeinreClientEvents.clientUnregistered(clients, channel.name);
|
||
|
} else {
|
||
|
WeinreClientEvents.targetUnregistered(clients, channel.name);
|
||
|
}
|
||
|
return delete this.channels[channel.name];
|
||
|
};
|
||
|
|
||
|
ChannelManager.prototype.getChannel = function(name, remoteAddress) {
|
||
|
var channel;
|
||
|
if (!_.has(this.channels, name)) {
|
||
|
return null;
|
||
|
}
|
||
|
channel = this.channels[name];
|
||
|
if (!channel) {
|
||
|
return null;
|
||
|
}
|
||
|
return channel;
|
||
|
};
|
||
|
|
||
|
ChannelManager.prototype.connectChannels = function(client, target) {
|
||
|
var clients;
|
||
|
if (client.isClosed || target.isClosed) {
|
||
|
return;
|
||
|
}
|
||
|
if (client.connections.length) {
|
||
|
this.disconnectChannels(client, client.connections[0]);
|
||
|
}
|
||
|
client.connections.push(target);
|
||
|
target.connections.push(client);
|
||
|
clients = this.getClientChannels(client.id);
|
||
|
WeinreClientEvents.connectionCreated(clients, client.name, target.name);
|
||
|
return WeinreTargetEvents.connectionCreated(target, client.name, target.name);
|
||
|
};
|
||
|
|
||
|
ChannelManager.prototype.disconnectChannels = function(client, target) {
|
||
|
var clients;
|
||
|
clients = this.getClientChannels(client.id);
|
||
|
WeinreClientEvents.connectionDestroyed(clients, client.name, target.name);
|
||
|
WeinreTargetEvents.connectionDestroyed(target, client.name, target.name);
|
||
|
client.connections = _.without(client.connections, target);
|
||
|
return target.connections = _.without(target.connections, client);
|
||
|
};
|
||
|
|
||
|
ChannelManager.prototype.getChannels = function(id) {
|
||
|
if (id != null) {
|
||
|
return _.filter(this.channels, function(item) {
|
||
|
return item.id === id;
|
||
|
});
|
||
|
} else {
|
||
|
return _.values(this.channels);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ChannelManager.prototype.getClientChannels = function(id) {
|
||
|
return _.filter(this.channels, function(item) {
|
||
|
return item.isClient && item.id === id;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
ChannelManager.prototype.getTargetChannels = function(id) {
|
||
|
return _.filter(this.channels, function(item) {
|
||
|
return item.isTarget && item.id === id;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
return ChannelManager;
|
||
|
|
||
|
})());
|
||
|
|
||
|
module.exports = new ChannelManager;
|