UNPKG

etsdk-js

Version:

Client-side to Tobii Pro SDK

1 lines 4.19 kB
{"version":3,"sources":["../src/TobiiClient.ts","../src/utils.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws'\r\nimport jsLogger, { ILogger } from 'js-logger'\r\nimport { waitForSocketState } from './utils'\r\nimport { WSMessage } from './models'\r\n\r\n// Create logger\r\njsLogger.useDefaults()\r\nconst tobiiLogger: ILogger = jsLogger.get('tobiiprosdk')\r\n\r\nexport default class TobiiClient {\r\n port: number\r\n host: string = 'http://localhost'\r\n wsHost: string = 'ws://localhost'\r\n _activeWSConnections: { [id: string]: WebSocket} = {}\r\n\r\n constructor(port: number = 9999, host: string = 'http://localhost', wsHost: string = 'ws://localhost') {\r\n this.port = port\r\n this.host = host\r\n this.wsHost = wsHost\r\n }\r\n \r\n async ping() {\r\n const response = await fetch(`${this.host}:${this.port}/api/ping`)\r\n const data = await response.json()\r\n return data\r\n }\r\n\r\n async getEyeTrackers() {\r\n const response = await fetch(`${this.host}:${this.port}/api/find`);\r\n const data = await response.json();\r\n return data;\r\n }\r\n\r\n async connectToEyeTracker(serial_number: string) {\r\n const ws: WebSocket = await this._createWebSocketConnection(serial_number);\r\n\r\n // Record all active WS connections\r\n this._activeWSConnections[serial_number] = ws;\r\n\r\n return ws;\r\n }\r\n\r\n async disconnectFromEyeTracker(serial_number: string) {\r\n const ws = this._activeWSConnections[serial_number];\r\n if (ws) {\r\n ws.close();\r\n delete this._activeWSConnections[serial_number];\r\n }\r\n }\r\n\r\n async clearAllActiveConnections() {\r\n for (const serial_number in this._activeWSConnections) {\r\n this.disconnectFromEyeTracker(serial_number);\r\n }\r\n }\r\n\r\n async _createWebSocketConnection(url_params: string) {\r\n const ws: WebSocket = new WebSocket(`${this.wsHost}:${this.port}/ws/${url_params}`);\r\n await waitForSocketState(ws, ws.OPEN);\r\n return ws;\r\n }\r\n}","import WebSocket from 'isomorphic-ws'\r\n\r\n/**\r\n * Forces a process to wait until the socket's `readyState` becomes the specified value.\r\n * @param socket The socket whose `readyState` is being watched\r\n * @param state The desired `readyState` for the socket\r\n */\r\nfunction waitForSocketState(socket: WebSocket, state: number): Promise<boolean> {\r\n return new Promise(function (resolve) {\r\n setTimeout(function () {\r\n if (socket.readyState === state) {\r\n resolve(true);\r\n } \r\n else if (socket.readyState === socket.CLOSED && state === socket.OPEN){\r\n resolve(false)\r\n }\r\n else {\r\n waitForSocketState(socket, state).then(resolve);\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport {waitForSocketState}"],"mappings":";AAAA,OAAO,eAAe;AACtB,OAAO,cAA2B;;;ACMlC,SAAS,mBAAmB,QAAmB,OAAiC;AAC9E,SAAO,IAAI,QAAQ,SAAU,SAAS;AACpC,eAAW,WAAY;AACrB,UAAI,OAAO,eAAe,OAAO;AAC/B,gBAAQ,IAAI;AAAA,MACd,WACS,OAAO,eAAe,OAAO,UAAU,UAAU,OAAO,MAAK;AACpE,gBAAQ,KAAK;AAAA,MACf,OACK;AACH,2BAAmB,QAAQ,KAAK,EAAE,KAAK,OAAO;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;ADfA,SAAS,YAAY;AACrB,IAAM,cAAuB,SAAS,IAAI,aAAa;AAEvD,IAAqB,cAArB,MAAiC;AAAA,EAC/B;AAAA,EACA,OAAe;AAAA,EACf,SAAiB;AAAA,EACjB,uBAAmD,CAAC;AAAA,EAEpD,YAAY,OAAe,MAAM,OAAe,oBAAoB,SAAiB,kBAAkB;AACrG,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,OAAO;AACX,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,WAAW;AACjE,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBAAiB;AACrB,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,WAAW;AACjE,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,oBAAoB,eAAuB;AAC/C,UAAM,KAAgB,MAAM,KAAK,2BAA2B,aAAa;AAGzE,SAAK,qBAAqB,aAAa,IAAI;AAE3C,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,yBAAyB,eAAuB;AACpD,UAAM,KAAK,KAAK,qBAAqB,aAAa;AAClD,QAAI,IAAI;AACN,SAAG,MAAM;AACT,aAAO,KAAK,qBAAqB,aAAa;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,MAAM,4BAA4B;AAChC,eAAW,iBAAiB,KAAK,sBAAsB;AACrD,WAAK,yBAAyB,aAAa;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,2BAA2B,YAAoB;AACnD,UAAM,KAAgB,IAAI,UAAU,GAAG,KAAK,MAAM,IAAI,KAAK,IAAI,OAAO,UAAU,EAAE;AAClF,UAAM,mBAAmB,IAAI,GAAG,IAAI;AACpC,WAAO;AAAA,EACT;AACF;","names":[]}