From f26c0a311ea0d942fac5b78a36eb0851e1e6cb3d Mon Sep 17 00:00:00 2001 From: Saeid Rezaei Baghbidi Date: Tue, 11 Feb 2020 00:14:47 -0800 Subject: [PATCH] Echo microservoce using websocket --- echo-websocket/.gitignore | 1 + echo-websocket/Dockerfile | 9 ++++++ echo-websocket/index.js | 61 +++++++++++++++++++++++++++++++++++++ echo-websocket/package.json | 15 +++++++++ 4 files changed, 86 insertions(+) create mode 100644 echo-websocket/.gitignore create mode 100644 echo-websocket/Dockerfile create mode 100644 echo-websocket/index.js create mode 100644 echo-websocket/package.json diff --git a/echo-websocket/.gitignore b/echo-websocket/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/echo-websocket/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/echo-websocket/Dockerfile b/echo-websocket/Dockerfile new file mode 100644 index 0000000..8ecff9e --- /dev/null +++ b/echo-websocket/Dockerfile @@ -0,0 +1,9 @@ +FROM node:alpine + +ENV DEBUG=* + +WORKDIR /src +COPY . . +RUN npm install + +CMD npm start \ No newline at end of file diff --git a/echo-websocket/index.js b/echo-websocket/index.js new file mode 100644 index 0000000..0dfe158 --- /dev/null +++ b/echo-websocket/index.js @@ -0,0 +1,61 @@ +const ioFogClient = require('@iofog/nodejs-sdk') +const WebSocketServer = require('ws').Server + +let port, wss +ioFogClient.init('iofog', 54321, null, main) + +async function fetchConfig() { + const configRequest = () => new Promise((resolve, reject) => { + ioFogClient.getConfig({ + 'onBadRequest': reject, + 'onError': reject, + 'onNewConfig': resolve + }) + }) + + try { + const config = await configRequest() + newPort = config.port || 8080 + if (newPort !== port) { + if (wss) { + wss.clients.forEach(ws => ws.close()) + } + + port = newPort + wss = new WebSocketServer({ port }) + + console.log(`listening on port: ${port}`) + + wss.on('connection', (ws) => { + console.log('new client connected!') + ws.send('connected!') + ws.on('message', (message) => { + console.log(message) + ws.send('echo: ' + message) + }) + }) + + wss.on('close', () => { + console.log('disconnected'); + }) + } + } catch (e) { + console.error(e) + process.exit(1) + } + +} + +async function main() { + await fetchConfig() + + ioFogClient.wsControlConnection({ + 'onNewConfigSignal': async () => { + await fetchConfig() + }, + 'onError': (error) => { + console.error('There was an error with Control WebSocket connection to ioFog: ', error) + process.exit(1) + } + }) +} diff --git a/echo-websocket/package.json b/echo-websocket/package.json new file mode 100644 index 0000000..6fcb770 --- /dev/null +++ b/echo-websocket/package.json @@ -0,0 +1,15 @@ +{ + "name": "echo-websocket", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node index.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@iofog/nodejs-sdk": "1.3.0", + "ws": "7.2.1" + } +}