commit 2b9fbb2431c10891f00f9395bf56ab9000212f4d Author: Niels Kooiman Date: Tue Jan 7 22:32:17 2020 +0100 first commit diff --git a/dealer.js b/dealer.js new file mode 100644 index 0000000..6ecd144 --- /dev/null +++ b/dealer.js @@ -0,0 +1,31 @@ +const zmq = require('zeromq'); +const fs = require('fs'); +const address = 'tcp://127.0.0.1:12345'; +let i = 1; +const run = async () => { + const fileName = "server.json"; + let keyPair = null; + if (fs.existsSync(fileName)) { + keyPair = JSON.parse(fs.readFileSync("server.json")); + } else { + keyPair = zmq.curveKeyPair(); + fs.writeFileSync("server.json", JSON.stringify(keyPair, null, 4)); + } + var dealer = new zmq.Dealer({ + curveServer: true, + curvePublicKey: keyPair.publicKey, + curveSecretKey: keyPair.secretKey, + }); + dealer.connect(address); + setInterval(() => { + let msg = [[ "weatherinfo", i ]]; // + dealer.identity + i += 1; + console.log('send', msg); + dealer.send(msg); + }, 300); + console.log("receiving..."); + for await (const [msg] of dealer) { + console.log("received: %s", msg.toString()) + } +} +run(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5452226 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,21 @@ +{ + "name": "zeromq-encrypted", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "node-gyp-build": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.0.tgz", + "integrity": "sha512-4oiumOLhCDU9Rronz8PZ5S4IvT39H5+JEv/hps9V8s7RSLhsac0TCP78ulnHXOo8X1wdpPiTayGlM1jr4IbnaQ==" + }, + "zeromq": { + "version": "6.0.0-beta.6", + "resolved": "https://registry.npmjs.org/zeromq/-/zeromq-6.0.0-beta.6.tgz", + "integrity": "sha512-wLf6M7pBHijl+BRltUL2VoDpgbQcOZetiX8UzycHL8CcYFxYnRrpoG5fi3UX3+Umavz1lk4/dGaQez8qiDgr/Q==", + "requires": { + "node-gyp-build": "^4.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a79ae6d --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "zeromq-encrypted", + "version": "1.0.0", + "description": "", + "main": "dealer.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "zeromq": "^6.0.0-beta.6" + } +} diff --git a/router.js b/router.js new file mode 100644 index 0000000..3d38fb3 --- /dev/null +++ b/router.js @@ -0,0 +1,32 @@ +const zmq = require('zeromq'); +const address = 'tcp://127.0.0.1:12345'; +const net = require('net'); +const keyPair = zmq.curveKeyPair(); +let router = new zmq.Router({ + curveServer: false, + curvePublicKey: keyPair.publicKey, + curveSecretKey: keyPair.secretKey, + curveServerKey: '&WMz:eOrkJE@OO}5Lm?hcE:L:NZX9mGUGkFMCVyd' +}); +const listen = async () => { + for await (const [sender, msg] of router) { + console.log("received: %s", Buffer.from(sender).toString('base64'), msg.toString()); + setTimeout(() => { + let n = Math.ceil(Math.random() * 50) - 10; + router.send([sender, "hoi12345#"]); + }, 100); + } +} +const listenForEvents = async () => { + for await (event of router.events) { + console.log(`${event.type} ${JSON.stringify(event)}`) + } +} +const run = async () => { + await router.bind(address); + await Promise.all([ + listen(), + listenForEvents() + ]); +}; +run(); \ No newline at end of file diff --git a/server.json b/server.json new file mode 100644 index 0000000..e86ec41 --- /dev/null +++ b/server.json @@ -0,0 +1,4 @@ +{ + "publicKey": "&WMz:eOrkJE@OO}5Lm?hcE:L:NZX9mGUGkFMCVyd", + "secretKey": "VV8kNZ5HgW^#VT9G/-wPP7?-Jly8}jeYC!mkfYu$" +} \ No newline at end of file