UNPKG

landstrasse

Version:

Strongly typed WAMP Client for browsers

67 lines 3.13 kB
"use strict"; 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