ludus/out/goog/messaging/abstractchannel.js
2023-11-16 13:22:15 -05:00

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_;
};