Files
ewelink-api/mixins/websocket/openWebSocketMixin.js
Martin M 6e240c181f Release v1.10.0 (#38)
* 100% coverage for mixins/user/regionMixin.js

* check if websocket connection is valid json

* removed unnecessary delays

* added more test cases

* move constants to json files

* renamed login method to getCredentials

* mixin renamed

* don’t export internal methods

* mixin renamed

* keep socket connection opened

* using new getCredentials method

* reanmed login to credentials

* version bump
2019-11-29 02:25:38 -03:00

46 lines
1.1 KiB
JavaScript

const W3CWebSocket = require('websocket').w3cwebsocket;
const WebSocketAsPromised = require('websocket-as-promised');
const payloads = require('../../lib/payloads');
const openWebSocketMixin = {
/**
* Open a socket connection to eWeLink
* and execute callback function with server message as argument
*
* @param callback
* @param heartbeat
* @returns {Promise<WebSocketAsPromised>}
*/
async openWebSocket(callback, ...{ heartbeat = 120000 }) {
const payloadLogin = payloads.wssLoginPayload({
at: this.at,
apiKey: this.apiKey,
});
const wsp = new WebSocketAsPromised(this.getApiWebSocket(), {
createWebSocket: wss => new W3CWebSocket(wss),
});
wsp.onMessage.addListener(message => {
try {
const data = JSON.parse(message);
callback(data);
} catch (error) {
callback(message);
}
});
await wsp.open();
await wsp.send(payloadLogin);
setInterval(async () => {
await wsp.send('ping');
}, heartbeat);
return wsp;
},
};
module.exports = openWebSocketMixin;