UNPKG

react-teamspeak-remote-app-api

Version:
115 lines (114 loc) 5.13 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TS5ConnectionHandler = void 0; var dataHandler_1 = require("../../handlers/teamspeak/dataHandler"); var messageHandler_1 = require("../../handlers/teamspeak/messageHandler"); // Establish connection to TS5 client // Main class var TS5ConnectionHandler = /** @class */ (function () { function TS5ConnectionHandler( // Port of TS5 client remoteAppPort, authPayload, logger, // State setters for dataHandler setConnections, setChannels, setClients, setActiveConnectionStateId) { this.authenticated = false; // Is the connection authenticated? // Create websocket connection to TS5 client this.remoteAppPort = remoteAppPort; this.authPayload = authPayload; this.logger = logger; this.ws = new WebSocket("ws://localhost:".concat(this.remoteAppPort)); // Create dataHandler and messageHandler this.dataHandler = new dataHandler_1.TS5DataHandler(setConnections, setChannels, setClients, logger); this.messageHandler = new messageHandler_1.TS5MessageHandler(this.ws, this.dataHandler, setActiveConnectionStateId, logger); } TS5ConnectionHandler.prototype.reconnect = function () { this.logger.log("Reconnecting..."); this.ws.close(); this.ws = new WebSocket("ws://localhost:".concat(this.remoteAppPort)); this.dataHandler.clearAll(); this.authenticated = false; this.connect(); }; // Connect to TS5 client TS5ConnectionHandler.prototype.connect = function () { var _this = this; var _a; this.logger.log('Connecting to TS5 client...'); // Create authentication payload var initialPayload = { type: "auth", payload: __assign(__assign({}, this.authPayload), { content: { apiKey: (_a = localStorage.getItem("apiKey")) !== null && _a !== void 0 ? _a : "", } }) }; this.ws.onopen = function () { // Send authentication payload to TS5 client _this.ws.send(JSON.stringify(initialPayload)); _this.logger.wsSent(initialPayload); }; this.ws.onclose = function (event) { _this.logger.log("WebSocket connection closed", event); // If the connection was closed before authentication, remove the API key from local storage // OBS weirdly caches the localstorage and is very stubborn about clearing it (even when clicking "Clear Cache") if (!_this.authenticated) { _this.logger.log("WebSocket connection closed before authentication"); localStorage.removeItem("apiKey"); } setTimeout(function () { _this.reconnect(); }, 2000); }; // Handle messages received from TS5 client // See TS5MessageHandler class this.ws.onmessage = function (event) { var data = JSON.parse(event.data); _this.logger.wsReceived(data); switch (data.type) { case "auth": _this.messageHandler.handleAuthMessage(data); _this.authenticated = true; break; case "clientMoved": _this.messageHandler.handleClientMovedMessage(data); break; case "clientPropertiesUpdated": _this.messageHandler.handleClientPropertiesUpdatedMessage(data); break; case "talkStatusChanged": _this.messageHandler.handleTalkStatusChangedMessage(data); break; case "serverPropertiesUpdated": _this.messageHandler.handleServerPropertiesUpdatedMessage(data); break; case "connectStatusChanged": _this.messageHandler.handleConnectStatusChangedMessage(data); break; case "clientSelfPropertyUpdated": _this.messageHandler.handleClientSelfPropertyUpdatedMessage(data); break; case "channels": _this.messageHandler.handleChannelsMessage(data); break; case "channelCreated": _this.messageHandler.handleChannelCreatedMessage(data); break; default: _this.logger.log("No handler for event type: ".concat(data.type)); break; } }; }; return TS5ConnectionHandler; }()); exports.TS5ConnectionHandler = TS5ConnectionHandler;