diffusion
Version:
Diffusion JavaScript client
138 lines (137 loc) • 5.87 kB
JavaScript
;
/**
* @module Services.Control
*/
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.SessionPropertiesEventSerialiser = exports.SessionPropertiesEventSerialiserClass = void 0;
var close_reason_1 = require("./../../../client/close-reason");
var errors_1 = require("./../../../errors/errors");
var Codec = require("./../../io/codec");
var BEES = require("./../../serialisers/byte-encoded-enum-serialiser");
var serialiser_1 = require("./../../serialisers/serialiser");
var session_id_serialiser_1 = require("./../../session/session-id-serialiser");
var session_properties_event_type_1 = require("./session-properties-event-type");
var UpdateEntryType;
(function (UpdateEntryType) {
/**
* Indicates a new property.
*
* Will be followed by the new value.
*/
UpdateEntryType[UpdateEntryType["NEW"] = 1] = "NEW";
/**
* Indicates a changed property.
*
* Will be followed by the old value and the new value.
*/
UpdateEntryType[UpdateEntryType["CHANGE"] = 2] = "CHANGE";
/**
* Indicates a removed property.
*
* Will be followed by the old value.
*/
UpdateEntryType[UpdateEntryType["REMOVE"] = 3] = "REMOVE";
/**
* Indicate no change.
*
* Will be followed by the current value.
*/
UpdateEntryType[UpdateEntryType["SAME"] = 4] = "SAME";
})(UpdateEntryType || (UpdateEntryType = {}));
function completeReadUpdateEvent(bis, sessionId) {
var updateType = Codec.readByte(bis);
var oldProperties = {};
var newProperties = {};
var size = Codec.readInt32(bis);
for (var i = 0; i < size; ++i) {
var key = Codec.readString(bis);
var type = BEES.read(bis, UpdateEntryType);
switch (type) {
case UpdateEntryType.NEW:
oldProperties[key] = null;
newProperties[key] = Codec.readString(bis);
break;
case UpdateEntryType.CHANGE:
oldProperties[key] = Codec.readString(bis);
newProperties[key] = Codec.readString(bis);
break;
case UpdateEntryType.REMOVE:
oldProperties[key] = Codec.readString(bis);
break;
case UpdateEntryType.SAME:
newProperties[key] = Codec.readString(bis);
break;
default:
throw new errors_1.IOError("Invalid update entry type: type");
}
}
return {
sessionId: sessionId,
type: session_properties_event_type_1.SessionPropertiesEventType.UPDATE,
updateType: updateType,
oldProperties: oldProperties,
newProperties: newProperties
};
}
/**
* Serialiser for {@link SessionPropertiesEvent}
*/
var SessionPropertiesEventSerialiserClass = /** @class */ (function (_super) {
__extends(SessionPropertiesEventSerialiserClass, _super);
function SessionPropertiesEventSerialiserClass() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* Read a {@link SessionPropertiesEvent} from the stream
*
* @param bis the input stream
* @return the {@link SessionPropertiesEvent} that was read
*/
SessionPropertiesEventSerialiserClass.prototype.read = function (bis) {
var sessionId = session_id_serialiser_1.SessionIdSerialiser.read(bis);
var type = BEES.read(bis, session_properties_event_type_1.SessionPropertiesEventType);
switch (type) {
case session_properties_event_type_1.SessionPropertiesEventType.OPEN:
var oldPropertiesOpen = Codec.readDictionary(bis, Codec.readString);
return {
sessionId: sessionId,
type: session_properties_event_type_1.SessionPropertiesEventType.OPEN,
oldProperties: oldPropertiesOpen
};
case session_properties_event_type_1.SessionPropertiesEventType.UPDATE:
return completeReadUpdateEvent(bis, sessionId);
case session_properties_event_type_1.SessionPropertiesEventType.CLOSE:
var closeReason = BEES.read(bis, close_reason_1.ClientCloseReason);
var oldPropertiesClose = Codec.readDictionary(bis, Codec.readString);
return {
sessionId: sessionId,
type: session_properties_event_type_1.SessionPropertiesEventType.CLOSE,
oldProperties: oldPropertiesClose,
closeReason: closeReason
};
default:
throw new errors_1.IOError('Unknown session properties event type: ' + type);
}
};
return SessionPropertiesEventSerialiserClass;
}(serialiser_1.AbstractSerialiser));
exports.SessionPropertiesEventSerialiserClass = SessionPropertiesEventSerialiserClass;
/**
* The {@link SessionPropertiesEventSerialiser} singleton
*/ // eslint-disable-next-line @typescript-eslint/naming-convention
exports.SessionPropertiesEventSerialiser = new SessionPropertiesEventSerialiserClass();