diff --git a/examples/serial-port/client.ts b/examples/serial-port/client.ts new file mode 100644 index 0000000000..371776df06 --- /dev/null +++ b/examples/serial-port/client.ts @@ -0,0 +1,18 @@ +import { io } from "socket.io-client"; + +const socket = io("ws://localhost:8080/", {}); + +socket.on("connect", () => { + console.log(`connect ${socket.id}`); +}); + +socket.on("disconnect", () => { + console.log(`disconnect`); +}); + +socket.on("onDeviceDisconnected", () => { + console.log(`onDeviceDisconnected`); +}); +socket.on("onDeviceConnected", () => { + console.log(`onDeviceConnected`); +}); diff --git a/examples/serial-port/package.json b/examples/serial-port/package.json new file mode 100644 index 0000000000..e13bff8eb2 --- /dev/null +++ b/examples/serial-port/package.json @@ -0,0 +1,20 @@ +{ + "name": "typescript-example", + "version": "1.0.0", + "description": "An example with TypeScript", + "private": true, + "scripts": { + "build": "tsc", + "start:server": "ts-node server.ts", + "start:client": "ts-node client.ts" + }, + "author": "Damien Arrachequesne", + "license": "MIT", + "dependencies": { + "serialport": "^9.2.0", + "socket.io": "^4.0.0", + "socket.io-client": "^4.0.0", + "ts-node": "^9.0.0", + "typescript": "^4.0.5" + } +} diff --git a/examples/serial-port/server.ts b/examples/serial-port/server.ts new file mode 100644 index 0000000000..f6826d1924 --- /dev/null +++ b/examples/serial-port/server.ts @@ -0,0 +1,87 @@ +import { Server } from "socket.io"; +const SerialPort = require("serialport"); +const Readline = require("@serialport/parser-readline"); +const emitter = require("events").EventEmitter; + +const em = new emitter(); +const deviceName = "/dev/tty.usbserial-0001"; + +const io = new Server(8080); + +let found = false; + +function findDevice() { + console.log("findDevice"); + SerialPort.list() + .then(function (ports) { + // // iterate through ports + for (var i = 0; i < ports.length; i += 1) { + console.log("list", ports[i]); + if (ports[i].path === deviceName) { + console.log("device founded"); + found = true; + em.emit("connected"); + startDevice(); + return; + } + } + if (!found) { + setTimeout(findDevice, 1000); + } + }) + .catch(function (error) { + console.log("error on read port", error); + }); +} + +function startDevice() { + try { + const port = new SerialPort(deviceName, { baudRate: 9600 }); + const parser = port.pipe(new Readline({ delimiter: "\n" })); // Read the port data + + port.on("open", () => { + console.log("serial port open"); + }); + + parser.on("data", (data) => { + console.log("got word from arduino:", data); + em.emit("onDataReceived", data); + }); + + port.on("close", function (err) { + console.log("Port closed."), err; + found = false; + em.emit("disconnect"); + setTimeout(findDevice, 1000); + }); + } catch (e) { + console.log("device not found "); + } +} + +io.on("connect", (socket) => { + console.log(`connect ${socket.id}`); + + if (found) { + socket.emit("onDeviceConnected"); + } else { + socket.emit("onDeviceDisconnected"); + } + + em.on("disconnect", function (data) { + socket.emit("onDeviceDisconnected"); + }); + em.on("connected", function (data) { + socket.emit("onDeviceConnected"); + }); + em.on("onDataReceived", function (data) { + socket.emit("onDataReceived", data); + }); + + socket.on("disconnect", () => { + console.log(`disconnect ${socket.id}`); + }); +}); + +console.log("start program"); +findDevice(); diff --git a/examples/serial-port/tsconfig.json b/examples/serial-port/tsconfig.json new file mode 100644 index 0000000000..943149c053 --- /dev/null +++ b/examples/serial-port/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es5" + }, + "exclude": [ + "node_modules" + ] + } \ No newline at end of file