blob: fa0700ded30e0ead337f8f82f19fd266f3b5388d [file] [log] [blame]
// 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;