// 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;