mirror of
https://github.com/parnic/node-intellicenter.git
synced 2025-06-16 18:20:14 -05:00
Create Unit class to make queries easy
This commit is contained in:
38
dist/index.js
vendored
38
dist/index.js
vendored
@ -1,7 +1,6 @@
|
||||
"use strict";
|
||||
import { WebSocket } from "ws";
|
||||
import { FindUnits } from "./finder.js";
|
||||
import { GetSystemInfoRequest } from "./messages/system-info.js";
|
||||
import { Unit } from "./unit.js";
|
||||
console.log("searching...");
|
||||
const f = new FindUnits();
|
||||
const units = await f.searchAsync(1000);
|
||||
@ -15,33 +14,12 @@ if (units.length > 1) {
|
||||
}
|
||||
const endpoint = units[0].addressStr;
|
||||
const port = units[0].port;
|
||||
let pingTimeout;
|
||||
console.log("connecting to intellicenter device at", endpoint, "port", port);
|
||||
const client = new WebSocket(`ws://${endpoint}:${port.toString()}`);
|
||||
const heartbeat = () => {
|
||||
clearTimeout(pingTimeout);
|
||||
pingTimeout = setTimeout(() => {
|
||||
client.terminate();
|
||||
}, 30000 + 1000);
|
||||
};
|
||||
client.on("error", console.error);
|
||||
client.on("open", heartbeat);
|
||||
client.on("ping", heartbeat);
|
||||
client.on("close", () => {
|
||||
clearTimeout(pingTimeout);
|
||||
});
|
||||
client.on("message", (msg) => {
|
||||
const respObj = JSON.parse(msg.toString());
|
||||
console.log(JSON.stringify(respObj, null, 2));
|
||||
});
|
||||
await new Promise((resolve, reject) => {
|
||||
client.once("error", reject);
|
||||
client.once("open", resolve);
|
||||
}).then(() => {
|
||||
console.log("connected");
|
||||
console.log("sending request...");
|
||||
const req = GetSystemInfoRequest();
|
||||
client.send(JSON.stringify(req));
|
||||
client.close();
|
||||
});
|
||||
const unit = new Unit(endpoint, port);
|
||||
await unit.connect();
|
||||
console.log("connected");
|
||||
console.log("sending Get System Info request...");
|
||||
const resp = await unit.getSystemInfo();
|
||||
console.log("got response:", JSON.stringify(resp, null, 2));
|
||||
unit.close();
|
||||
//# sourceMappingURL=index.js.map
|
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC5B,MAAM,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;AAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC,KAAK,EAAE,CAAC;AACV,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;AAExC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACvB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC5D,CAAC;AAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACrB,MAAM,IAAI,KAAK,CACb,oEAAoE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC5F,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAE3B,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC7E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACrB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACzB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AAClD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AACxC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5D,IAAI,CAAC,KAAK,EAAE,CAAC"}
|
16
dist/unit.d.ts
vendored
Normal file
16
dist/unit.d.ts
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
import { EventEmitter } from "events";
|
||||
import { ICRequest } from "./messages/request.js";
|
||||
import { ICResponse } from "./messages/response.js";
|
||||
export declare class Unit extends EventEmitter {
|
||||
endpoint: string;
|
||||
port: number;
|
||||
private client?;
|
||||
private pingTimeout?;
|
||||
constructor(endpoint: string, port?: number);
|
||||
connect(): Promise<void>;
|
||||
close(): void;
|
||||
private heartbeat;
|
||||
private onClientMessage;
|
||||
send(request: ICRequest): Promise<ICResponse>;
|
||||
getSystemInfo(): Promise<ICResponse>;
|
||||
}
|
62
dist/unit.js
vendored
Normal file
62
dist/unit.js
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
import { EventEmitter } from "events";
|
||||
import { WebSocket } from "ws";
|
||||
import { GetSystemInfoRequest } from "./messages/system-info.js";
|
||||
export class Unit extends EventEmitter {
|
||||
endpoint;
|
||||
port;
|
||||
client;
|
||||
pingTimeout;
|
||||
constructor(endpoint, port = 6680) {
|
||||
super();
|
||||
this.endpoint = endpoint;
|
||||
this.port = port;
|
||||
this.endpoint = endpoint;
|
||||
this.port = port;
|
||||
}
|
||||
async connect() {
|
||||
if (this.client) {
|
||||
throw new Error("can't open a client that is already open");
|
||||
}
|
||||
this.client = new WebSocket(`ws://${this.endpoint}:${this.port.toString()}`);
|
||||
const { heartbeat, onClientMessage } = this;
|
||||
this.client.on("error", console.error);
|
||||
this.client.on("open", heartbeat);
|
||||
this.client.on("ping", heartbeat);
|
||||
this.client.on("close", () => {
|
||||
clearTimeout(this.pingTimeout);
|
||||
this.client?.removeAllListeners();
|
||||
this.client = undefined;
|
||||
});
|
||||
this.client.on("message", onClientMessage);
|
||||
await new Promise((resolve, reject) => {
|
||||
this.client?.once("error", reject);
|
||||
this.client?.once("open", resolve);
|
||||
});
|
||||
}
|
||||
close() {
|
||||
this.client?.close();
|
||||
}
|
||||
heartbeat = () => {
|
||||
clearTimeout(this.pingTimeout);
|
||||
this.pingTimeout = setTimeout(() => {
|
||||
this.close();
|
||||
}, 30000 + 1000);
|
||||
};
|
||||
onClientMessage = (msg) => {
|
||||
const respObj = JSON.parse(msg.toString());
|
||||
this.emit(`response-${respObj.messageID}`, respObj);
|
||||
};
|
||||
async send(request) {
|
||||
this.client?.send(JSON.stringify(request));
|
||||
return await new Promise((resolve) => {
|
||||
this.once(`response-${request.messageID}`, (resp) => {
|
||||
resolve(resp);
|
||||
});
|
||||
});
|
||||
}
|
||||
async getSystemInfo() {
|
||||
const req = GetSystemInfoRequest();
|
||||
return await this.send(req);
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=unit.js.map
|
1
dist/unit.js.map
vendored
Normal file
1
dist/unit.js.map
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"unit.js","sourceRoot":"","sources":["../unit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAG/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,OAAO,IAAK,SAAQ,YAAY;IAK3B;IACA;IALD,MAAM,CAAa;IACnB,WAAW,CAAiC;IAEpD,YACS,QAAgB,EAChB,OAAO,IAAI;QAElB,KAAK,EAAE,CAAC;QAHD,aAAQ,GAAR,QAAQ,CAAQ;QAChB,SAAI,GAAJ,IAAI,CAAO;QAIlB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CACzB,QAAQ,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAChD,CAAC;QAEF,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3B,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAE3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,SAAS,GAAG,GAAG,EAAE;QACvB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE/B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IAEM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAe,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC,CAAC;IAEK,KAAK,CAAC,IAAI,CAAC,OAAkB;QAClC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAgB,EAAE,EAAE;gBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;QACnC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
44
index.ts
44
index.ts
@ -1,9 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
import { WebSocket } from "ws";
|
||||
import { FindUnits } from "./finder.js";
|
||||
import { GetSystemInfoRequest } from "./messages/system-info.js";
|
||||
import { ICResponse } from "./messages/response.js";
|
||||
import { Unit } from "./unit.js";
|
||||
|
||||
console.log("searching...");
|
||||
const f = new FindUnits();
|
||||
@ -24,37 +22,11 @@ if (units.length > 1) {
|
||||
const endpoint = units[0].addressStr;
|
||||
const port = units[0].port;
|
||||
|
||||
let pingTimeout: ReturnType<typeof setTimeout>;
|
||||
|
||||
console.log("connecting to intellicenter device at", endpoint, "port", port);
|
||||
const client = new WebSocket(`ws://${endpoint}:${port.toString()}`);
|
||||
|
||||
const heartbeat = () => {
|
||||
clearTimeout(pingTimeout);
|
||||
|
||||
pingTimeout = setTimeout(() => {
|
||||
client.terminate();
|
||||
}, 30000 + 1000);
|
||||
};
|
||||
|
||||
client.on("error", console.error);
|
||||
client.on("open", heartbeat);
|
||||
client.on("ping", heartbeat);
|
||||
client.on("close", () => {
|
||||
clearTimeout(pingTimeout);
|
||||
});
|
||||
|
||||
client.on("message", (msg: Buffer) => {
|
||||
const respObj = JSON.parse(msg.toString()) as ICResponse;
|
||||
console.log(JSON.stringify(respObj, null, 2));
|
||||
});
|
||||
await new Promise((resolve, reject) => {
|
||||
client.once("error", reject);
|
||||
client.once("open", resolve);
|
||||
}).then(() => {
|
||||
console.log("connected");
|
||||
console.log("sending request...");
|
||||
const req = GetSystemInfoRequest();
|
||||
client.send(JSON.stringify(req));
|
||||
client.close();
|
||||
});
|
||||
const unit = new Unit(endpoint, port);
|
||||
await unit.connect();
|
||||
console.log("connected");
|
||||
console.log("sending Get System Info request...");
|
||||
const resp = await unit.getSystemInfo();
|
||||
console.log("got response:", JSON.stringify(resp, null, 2));
|
||||
unit.close();
|
||||
|
77
unit.ts
Normal file
77
unit.ts
Normal file
@ -0,0 +1,77 @@
|
||||
import { EventEmitter } from "events";
|
||||
import { WebSocket } from "ws";
|
||||
import { ICRequest } from "./messages/request.js";
|
||||
import { ICResponse } from "./messages/response.js";
|
||||
import { GetSystemInfoRequest } from "./messages/system-info.js";
|
||||
|
||||
export class Unit extends EventEmitter {
|
||||
private client?: WebSocket;
|
||||
private pingTimeout?: ReturnType<typeof setTimeout>;
|
||||
|
||||
constructor(
|
||||
public endpoint: string,
|
||||
public port = 6680,
|
||||
) {
|
||||
super();
|
||||
|
||||
this.endpoint = endpoint;
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public async connect() {
|
||||
if (this.client) {
|
||||
throw new Error("can't open a client that is already open");
|
||||
}
|
||||
|
||||
this.client = new WebSocket(
|
||||
`ws://${this.endpoint}:${this.port.toString()}`,
|
||||
);
|
||||
|
||||
const { heartbeat, onClientMessage } = this;
|
||||
this.client.on("error", console.error);
|
||||
this.client.on("open", heartbeat);
|
||||
this.client.on("ping", heartbeat);
|
||||
this.client.on("close", () => {
|
||||
clearTimeout(this.pingTimeout);
|
||||
this.client?.removeAllListeners();
|
||||
this.client = undefined;
|
||||
});
|
||||
this.client.on("message", onClientMessage);
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
this.client?.once("error", reject);
|
||||
this.client?.once("open", resolve);
|
||||
});
|
||||
}
|
||||
|
||||
public close() {
|
||||
this.client?.close();
|
||||
}
|
||||
|
||||
private heartbeat = () => {
|
||||
clearTimeout(this.pingTimeout);
|
||||
|
||||
this.pingTimeout = setTimeout(() => {
|
||||
this.close();
|
||||
}, 30000 + 1000);
|
||||
};
|
||||
|
||||
private onClientMessage = (msg: Buffer) => {
|
||||
const respObj = JSON.parse(msg.toString()) as ICResponse;
|
||||
this.emit(`response-${respObj.messageID}`, respObj);
|
||||
};
|
||||
|
||||
public async send(request: ICRequest): Promise<ICResponse> {
|
||||
this.client?.send(JSON.stringify(request));
|
||||
return await new Promise((resolve) => {
|
||||
this.once(`response-${request.messageID}`, (resp: ICResponse) => {
|
||||
resolve(resp);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public async getSystemInfo(): Promise<ICResponse> {
|
||||
const req = GetSystemInfoRequest();
|
||||
return await this.send(req);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user