landstrasse
Version:
Strongly typed WAMP Client for browsers
63 lines • 2.75 kB
JavaScript
import StateMachine from '.';
import { EWampMessageID } from '../types/messages/MessageTypes';
export 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 || (EConnectionState = {}));
export var EMessageDirection;
(function (EMessageDirection) {
EMessageDirection["RECEIVED"] = "RECEIVED";
EMessageDirection["SENT"] = "SENT";
})(EMessageDirection || (EMessageDirection = {}));
export class ConnectionStateMachine extends StateMachine {
constructor() {
const transitions = new Map();
transitions.set(EConnectionState.CLOSED, ([msgDir, msgId]) => {
if (msgId === EWampMessageID.HELLO && msgDir === EMessageDirection.SENT) {
return EConnectionState.ETABLISHING;
}
return EConnectionState.ERROR;
});
transitions.set(EConnectionState.ETABLISHING, ([msgDir, msgId]) => {
if (msgId === EWampMessageID.WELCOME && msgDir === EMessageDirection.RECEIVED) {
return EConnectionState.ESTABLISHED;
}
if (msgId === EWampMessageID.CHALLENGE && msgDir === EMessageDirection.RECEIVED) {
return EConnectionState.CHALLENGING;
}
return EConnectionState.ERROR;
});
transitions.set(EConnectionState.ESTABLISHED, ([, msgId]) => {
if (msgId === EWampMessageID.GOODBYE) {
return EConnectionState.CLOSING;
}
return null;
});
transitions.set(EConnectionState.CLOSING, ([, msgId]) => {
if (msgId === EWampMessageID.GOODBYE) {
return EConnectionState.CLOSED;
}
return EConnectionState.ERROR;
});
transitions.set(EConnectionState.CHALLENGING, ([msgDir, msgId]) => {
if (msgId === EWampMessageID.AUTHENTICATE && msgDir === EMessageDirection.SENT) {
return EConnectionState.AUTHENTICATING;
}
return EConnectionState.ERROR;
});
transitions.set(EConnectionState.AUTHENTICATING, ([msgDir, msgId]) => {
if (msgId === EWampMessageID.WELCOME && msgDir === EMessageDirection.RECEIVED) {
return EConnectionState.ESTABLISHED;
}
return EConnectionState.ERROR;
});
super(EConnectionState.CLOSED, transitions);
}
}
//# sourceMappingURL=connection.js.map