aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/messaging/multichannel.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/messaging/multichannel.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/messaging/multichannel.js299
1 files changed, 0 insertions, 299 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/messaging/multichannel.js b/contexts/data/lib/closure-library/closure/goog/messaging/multichannel.js
deleted file mode 100644
index 5202c58..0000000
--- a/contexts/data/lib/closure-library/closure/goog/messaging/multichannel.js
+++ /dev/null
@@ -1,299 +0,0 @@
-// Copyright 2010 The Closure Library Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS-IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/**
- * @fileoverview Definition of goog.messaging.MultiChannel, which uses a
- * single underlying MessageChannel to carry several independent virtual message
- * channels.
- *
- */
-
-
-goog.provide('goog.messaging.MultiChannel');
-goog.provide('goog.messaging.MultiChannel.VirtualChannel');
-
-goog.require('goog.Disposable');
-goog.require('goog.debug.Logger');
-goog.require('goog.events.EventHandler');
-goog.require('goog.messaging.MessageChannel'); // interface
-goog.require('goog.object');
-
-
-
-/**
- * Creates a new MultiChannel wrapping a single MessageChannel. The
- * underlying channel shouldn't have any other listeners registered, but it
- * should be connected.
- *
- * Note that the other side of the channel should also be connected to a
- * MultiChannel with the same number of virtual channels.
- *
- * @param {goog.messaging.MessageChannel} underlyingChannel The underlying
- * channel to use as transport for the virtual channels.
- * @constructor
- * @extends {goog.Disposable}
- */
-goog.messaging.MultiChannel = function(underlyingChannel) {
- goog.base(this);
-
- /**
- * The underlying channel across which all requests are sent.
- * @type {goog.messaging.MessageChannel}
- * @private
- */
- this.underlyingChannel_ = underlyingChannel;
-
- /**
- * All the virtual channels that are registered for this MultiChannel.
- * These are null if they've been disposed.
- * @type {Object.<?goog.messaging.MultiChannel.VirtualChannel>}
- * @private
- */
- this.virtualChannels_ = {};
-
- this.underlyingChannel_.registerDefaultService(
- goog.bind(this.handleDefault_, this));
-};
-goog.inherits(goog.messaging.MultiChannel, goog.Disposable);
-
-
-/**
- * Logger object for goog.messaging.MultiChannel.
- * @type {goog.debug.Logger}
- * @private
- */
-goog.messaging.MultiChannel.prototype.logger_ =
- goog.debug.Logger.getLogger('goog.messaging.MultiChannel');
-
-
-/**
- * Creates a new virtual channel that will communicate across the underlying
- * channel.
- * @param {string} name The name of the virtual channel. Must be unique for this
- * MultiChannel. Cannot contain colons.
- * @return {!goog.messaging.MultiChannel.VirtualChannel} The new virtual
- * channel.
- */
-goog.messaging.MultiChannel.prototype.createVirtualChannel = function(name) {
- if (name.indexOf(':') != -1) {
- throw Error(
- 'Virtual channel name "' + name + '" should not contain colons');
- }
-
- if (name in this.virtualChannels_) {
- throw Error('Virtual channel "' + name + '" was already created for ' +
- 'this multichannel.');
- }
-
- var channel =
- new goog.messaging.MultiChannel.VirtualChannel(this, name);
- this.virtualChannels_[name] = channel;
- return channel;
-};
-
-
-/**
- * Handles the default service for the underlying channel. This dispatches any
- * unrecognized services to the appropriate virtual channel.
- *
- * @param {string} serviceName The name of the service being called.
- * @param {string|!Object} payload The message payload.
- * @private
- */
-goog.messaging.MultiChannel.prototype.handleDefault_ = function(
- serviceName, payload) {
- var match = serviceName.match(/^([^:]*):(.*)/);
- if (!match) {
- this.logger_.warning('Invalid service name "' + serviceName + '": no ' +
- 'virtual channel specified');
- return;
- }
-
- var channelName = match[1];
- serviceName = match[2];
- if (!(channelName in this.virtualChannels_)) {
- this.logger_.warning('Virtual channel "' + channelName + ' does not ' +
- 'exist, but a message was received for it: "' +
- serviceName + '"');
- return;
- }
-
- var virtualChannel = this.virtualChannels_[channelName];
- if (!virtualChannel) {
- this.logger_.warning('Virtual channel "' + channelName + ' has been ' +
- 'disposed, but a message was received for it: "' +
- serviceName + '"');
- return;
- }
-
- if (!virtualChannel.defaultService_) {
- this.logger_.warning('Service "' + serviceName + '" is not registered ' +
- 'on virtual channel "' + channelName + '"');
- return;
- }
-
- virtualChannel.defaultService_(serviceName, payload);
-};
-
-
-/** @override */
-goog.messaging.MultiChannel.prototype.disposeInternal = function() {
- goog.object.forEach(this.virtualChannels_, function(channel) {
- goog.dispose(channel);
- });
- goog.dispose(this.underlyingChannel_);
- delete this.virtualChannels_;
- delete this.underlyingChannel_;
-};
-
-
-
-/**
- * A message channel that proxies its messages over another underlying channel.
- *
- * @param {goog.messaging.MultiChannel} parent The MultiChannel
- * which created this channel, and which contains the underlying
- * MessageChannel that's used as the transport.
- * @param {string} name The name of this virtual channel. Unique among the
- * virtual channels in parent.
- * @constructor
- * @implements {goog.messaging.MessageChannel}
- * @extends {goog.Disposable}
- */
-goog.messaging.MultiChannel.VirtualChannel = function(parent, name) {
- goog.base(this);
-
- /**
- * The MultiChannel containing the underlying transport channel.
- * @type {goog.messaging.MultiChannel}
- * @private
- */
- this.parent_ = parent;
-
- /**
- * The name of this virtual channel.
- * @type {string}
- * @private
- */
- this.name_ = name;
-};
-goog.inherits(goog.messaging.MultiChannel.VirtualChannel,
- goog.Disposable);
-
-
-/**
- * The default service to run if no other services match.
- * @type {?function(string, (string|!Object))}
- * @private
- */
-goog.messaging.MultiChannel.VirtualChannel.prototype.defaultService_;
-
-
-/**
- * Logger object for goog.messaging.MultiChannel.VirtualChannel.
- * @type {goog.debug.Logger}
- * @private
- */
-goog.messaging.MultiChannel.VirtualChannel.prototype.logger_ =
- goog.debug.Logger.getLogger(
- 'goog.messaging.MultiChannel.VirtualChannel');
-
-
-/**
- * This is a no-op, since the underlying channel is expected to already be
- * initialized when it's passed in.
- *
- * @override
- */
-goog.messaging.MultiChannel.VirtualChannel.prototype.connect =
- function(opt_connectCb) {
- if (opt_connectCb) {
- opt_connectCb();
- }
-};
-
-
-/**
- * This always returns true, since the underlying channel is expected to already
- * be initialized when it's passed in.
- *
- * @override
- */
-goog.messaging.MultiChannel.VirtualChannel.prototype.isConnected =
- function() {
- return true;
-};
-
-
-/**
- * @override
- */
-goog.messaging.MultiChannel.VirtualChannel.prototype.registerService =
- function(serviceName, callback, opt_objectPayload) {
- this.parent_.underlyingChannel_.registerService(
- this.name_ + ':' + serviceName,
- goog.bind(this.doCallback_, this, callback),
- opt_objectPayload);
-};
-
-
-/**
- * @override
- */
-goog.messaging.MultiChannel.VirtualChannel.prototype.
- registerDefaultService = function(callback) {
- this.defaultService_ = goog.bind(this.doCallback_, this, callback);
-};
-
-
-/**
- * @override
- */
-goog.messaging.MultiChannel.VirtualChannel.prototype.send =
- function(serviceName, payload) {
- if (this.isDisposed()) {
- throw Error('#send called for disposed VirtualChannel.');
- }
-
- this.parent_.underlyingChannel_.send(this.name_ + ':' + serviceName,
- payload);
-};
-
-
-/**
- * Wraps a callback with a function that will log a warning and abort if it's
- * called when this channel is disposed.
- *
- * @param {function()} callback The callback to wrap.
- * @param {...*} var_args Other arguments, passed to the callback.
- * @private
- */
-goog.messaging.MultiChannel.VirtualChannel.prototype.doCallback_ =
- function(callback, var_args) {
- if (this.isDisposed()) {
- this.logger_.warning('Virtual channel "' + this.name_ + '" received ' +
- ' a message after being disposed.');
- return;
- }
-
- callback.apply({}, Array.prototype.slice.call(arguments, 1));
-};
-
-
-/** @override */
-goog.messaging.MultiChannel.VirtualChannel.prototype.disposeInternal =
- function() {
- this.parent_.virtualChannels_[this.name_] = null;
- this.parent_ = null;
-};