// Generated by CoffeeScript 1.8.0 var AnonymousId, Channel, MessageQueue, channelManager, genJSON, messageHandler, parseJSON, utils, _, __slice = [].slice; _ = require('underscore'); utils = require('./utils'); channelManager = require('./channelManager'); messageHandler = require('./messageHandler'); MessageQueue = require('./MessageQueue'); AnonymousId = 'anonymous'; module.exports = utils.registerClass(Channel = (function() { function Channel(pathPrefix, id, remoteAddress, isClient) { var prefix; this.pathPrefix = pathPrefix; this.id = id; this.remoteAddress = remoteAddress; this.isClient = isClient; prefix = this.isClient ? 'c-' : 't-'; this.name = "" + prefix + (utils.getNextSequenceNumber()); this.messageQueue = new MessageQueue; this.isClosed = false; this.connections = []; this.isTarget = !this.isClient; this.readTimeout = utils.options.readTimeout * 1000; if (!this.id) { this.id = AnonymousId; } this.description = { channel: this.name, id: this.id, hostName: this.remoteAddress, remoteAddress: this.remoteAddress }; this.updateLastRead(); channelManager.created(this); } Channel.prototype.close = function() { if (this.isClosed) { return; } channelManager.destroyed(this); this.isClosed = true; return this.messageQueue.shutdown(); }; Channel.prototype.sendCallback = function() { var args, callbackId, intfName; intfName = arguments[0], callbackId = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : []; if (!callbackId) { return; } args.unshift(callbackId); return this.sendMessage.apply(this, [intfName, 'sendCallback'].concat(__slice.call(args))); }; Channel.prototype.sendMessage = function() { var args, intfName, message, method; intfName = arguments[0], method = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : []; message = genJSON({ "interface": intfName, method: method, args: args }); return this.messageQueue.push(message); }; Channel.prototype.handleMessages = function(messages) { var message, _i, _len, _results; _results = []; for (_i = 0, _len = messages.length; _i < _len; _i++) { message = messages[_i]; message = parseJSON(message); if (!message) { continue; } _results.push(messageHandler.handleMessage(this, message)); } return _results; }; Channel.prototype.getMessages = function(callback) { this.updateLastRead(); if (this.isClosed) { return callback.call(null, null); } return this.messageQueue.pullAll(this.readTimeout, callback); }; Channel.prototype.updateLastRead = function() { return this.lastRead = (new Date).valueOf(); }; Channel.prototype.toString = function() { var connections; connections = _.map(this.connections, function(val) { return val.name; }).join(','); return "Channel(" + this.name + ", closed:" + this.isClosed + ", connections:[" + connections + "])"; }; return Channel; })()); parseJSON = function(message) { var e; try { return JSON.parse(message); } catch (_error) { e = _error; return null; } }; genJSON = function(message) { var e; try { return JSON.stringify(message); } catch (_error) { e = _error; return null; } };