emotiv-ts
Version:
A Typescript library that wraps the Cortex API functionalities to communicate with Emotiv headsets
81 lines (66 loc) • 2.78 kB
text/typescript
import type {w3cwebsocket} from 'websocket';
import {Requests} from "../enums/internal/emotiv.requests";
import {QueryHeadsets} from "../models/requests/headsets/query-headsets";
import {ControlDevice} from "../models/requests/headsets/control-device";
export class HeadsetService {
socket: w3cwebsocket;
private headsetId: string = "";
constructor(socket: w3cwebsocket) {
this.socket = socket
}
// TODO: Change the function to query all headsets instead of just the first
// This change should be made before making it as a public library
getHeadsets(): Promise<string> {
let context = this;
let queryHeadsetRequest = new QueryHeadsets();
return new Promise((resolve, reject) => {
context.socket.send(JSON.stringify(queryHeadsetRequest));
context.socket.onmessage = (message) => {
try {
let data = JSON.parse(message.data as unknown as string);
if(data['id']==Requests.QUERY_HEADSET){
console.debug("QueryHeadsets response:", data)
if(data['error']){
throw new Error(data['error']['message'])
}
if(data['result'].length > 0){
context.headsetId = data['result'][0]['id'];
resolve(context.headsetId);
}
else{
console.log('No Emotiv headset was found. Please, connect one.')
reject('No Emotiv headset was found. Please, connect one.')
}
}
} catch (error) {
console.error(error);
reject(error)
}
}
})
}
controlDevice(headsetId: string) {
let context = this;
let controlDeviceRequest = new ControlDevice(headsetId);
return new Promise(function(resolve, reject){
context.socket.send(JSON.stringify(controlDeviceRequest));
context.socket.onmessage = (message) => {
try {
let data = JSON.parse(message.data as string);
if(data['id']==Requests.CONTROL_DEVICE){
if(data['error']){
throw new Error(data['error']['message'])
}
resolve(message.data);
}
} catch (error) {
console.error(error);
reject(error)
}
}
})
}
public getHeadsetId(): string {
return this.headsetId;
}
}