landstrasse
Version:
Strongly typed WAMP Client for browsers
67 lines • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConnectionStateMachine = exports.EMessageDirection = exports.EConnectionState = void 0;
const _1 = require(".");
const MessageTypes_1 = require("../types/messages/MessageTypes");
var EConnectionState;
(function (EConnectionState) {
EConnectionState["CLOSED"] = "CLOSED";
EConnectionState["ETABLISHING"] = "ETABLISHING";
EConnectionState["ESTABLISHED"] = "ETABLISHED";
EConnectionState["CLOSING"] = "CLOSING";
EConnectionState["ERROR"] = "ERROR";
EConnectionState["AUTHENTICATING"] = "AUTHENTICATING";
EConnectionState["CHALLENGING"] = "CHALLENGING";
})(EConnectionState = exports.EConnectionState || (exports.EConnectionState = {}));
var EMessageDirection;
(function (EMessageDirection) {
EMessageDirection["RECEIVED"] = "RECEIVED";
EMessageDirection["SENT"] = "SENT";
})(EMessageDirection = exports.EMessageDirection || (exports.EMessageDirection = {}));
class ConnectionStateMachine extends _1.default {
constructor() {
const transitions = new Map();
transitions.set(EConnectionState.CLOSED, ([msgDir, msgId]) => {
if (msgId === MessageTypes_1.EWampMessageID.HELLO && msgDir === EMessageDirection.SENT) {
return EConnectionState.ETABLISHING;
}
return EConnectionState.ERROR;
});
transitions.set(EConnectionState.ETABLISHING, ([msgDir, msgId]) => {
if (msgId === MessageTypes_1.EWampMessageID.WELCOME && msgDir === EMessageDirection.RECEIVED) {
return EConnectionState.ESTABLISHED;
}
if (msgId === MessageTypes_1.EWampMessageID.CHALLENGE && msgDir === EMessageDirection.RECEIVED) {
return EConnectionState.CHALLENGING;
}
return EConnectionState.ERROR;
});
transitions.set(EConnectionState.ESTABLISHED, ([, msgId]) => {
if (msgId === MessageTypes_1.EWampMessageID.GOODBYE) {
return EConnectionState.CLOSING;
}
return null;
});
transitions.set(EConnectionState.CLOSING, ([, msgId]) => {
if (msgId === MessageTypes_1.EWampMessageID.GOODBYE) {
return EConnectionState.CLOSED;
}
return EConnectionState.ERROR;
});
transitions.set(EConnectionState.CHALLENGING, ([msgDir, msgId]) => {
if (msgId === MessageTypes_1.EWampMessageID.AUTHENTICATE && msgDir === EMessageDirection.SENT) {
return EConnectionState.AUTHENTICATING;
}
return EConnectionState.ERROR;
});
transitions.set(EConnectionState.AUTHENTICATING, ([msgDir, msgId]) => {
if (msgId === MessageTypes_1.EWampMessageID.WELCOME && msgDir === EMessageDirection.RECEIVED) {
return EConnectionState.ESTABLISHED;
}
return EConnectionState.ERROR;
});
super(EConnectionState.CLOSED, transitions);
}
}
exports.ConnectionStateMachine = ConnectionStateMachine;
//# sourceMappingURL=connection.js.map