74 lines
2.7 KiB
JavaScript
74 lines
2.7 KiB
JavaScript
|
/*TRANSPILED*//*
|
||
|
|
||
|
Copyright The Closure Library Authors.
|
||
|
SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
'use strict';
|
||
|
goog.provide("goog.messaging.AbstractChannel");
|
||
|
goog.require("goog.Disposable");
|
||
|
goog.require("goog.json");
|
||
|
goog.require("goog.log");
|
||
|
goog.require("goog.messaging.MessageChannel");
|
||
|
goog.messaging.AbstractChannel = function() {
|
||
|
goog.messaging.AbstractChannel.base(this, "constructor");
|
||
|
this.services_ = {};
|
||
|
};
|
||
|
goog.inherits(goog.messaging.AbstractChannel, goog.Disposable);
|
||
|
goog.messaging.AbstractChannel.prototype.defaultService_;
|
||
|
goog.messaging.AbstractChannel.prototype.logger = goog.log.getLogger("goog.messaging.AbstractChannel");
|
||
|
goog.messaging.AbstractChannel.prototype.connect = function(opt_connectCb) {
|
||
|
if (opt_connectCb) {
|
||
|
opt_connectCb();
|
||
|
}
|
||
|
};
|
||
|
goog.messaging.AbstractChannel.prototype.isConnected = function() {
|
||
|
return true;
|
||
|
};
|
||
|
goog.messaging.AbstractChannel.prototype.registerService = function(serviceName, callback, opt_objectPayload) {
|
||
|
this.services_[serviceName] = {callback:callback, objectPayload:!!opt_objectPayload};
|
||
|
};
|
||
|
goog.messaging.AbstractChannel.prototype.registerDefaultService = function(callback) {
|
||
|
this.defaultService_ = callback;
|
||
|
};
|
||
|
goog.messaging.AbstractChannel.prototype.send = goog.abstractMethod;
|
||
|
goog.messaging.AbstractChannel.prototype.deliver = function(serviceName, payload) {
|
||
|
const service = this.getService(serviceName, payload);
|
||
|
if (!service) {
|
||
|
return;
|
||
|
}
|
||
|
const decodedPayload = this.decodePayload(serviceName, payload, service.objectPayload);
|
||
|
if (decodedPayload != null) {
|
||
|
service.callback(decodedPayload);
|
||
|
}
|
||
|
};
|
||
|
goog.messaging.AbstractChannel.prototype.getService = function(serviceName, payload) {
|
||
|
const service = this.services_[serviceName];
|
||
|
if (service) {
|
||
|
return service;
|
||
|
} else if (this.defaultService_) {
|
||
|
const callback = goog.partial(this.defaultService_, serviceName);
|
||
|
const objectPayload = goog.isObject(payload);
|
||
|
return {callback:callback, objectPayload:objectPayload};
|
||
|
}
|
||
|
goog.log.warning(this.logger, 'Unknown service name "' + serviceName + '"');
|
||
|
return null;
|
||
|
};
|
||
|
goog.messaging.AbstractChannel.prototype.decodePayload = function(serviceName, payload, objectPayload) {
|
||
|
if (objectPayload && typeof payload === "string") {
|
||
|
try {
|
||
|
return JSON.parse(payload);
|
||
|
} catch (err) {
|
||
|
goog.log.warning(this.logger, "Expected JSON payload for " + serviceName + ', was "' + payload + '"');
|
||
|
return null;
|
||
|
}
|
||
|
} else if (!objectPayload && typeof payload !== "string") {
|
||
|
return goog.json.serialize(payload);
|
||
|
}
|
||
|
return payload;
|
||
|
};
|
||
|
goog.messaging.AbstractChannel.prototype.disposeInternal = function() {
|
||
|
goog.messaging.AbstractChannel.base(this, "disposeInternal");
|
||
|
delete this.services_;
|
||
|
delete this.defaultService_;
|
||
|
};
|