diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000..c89a337 Binary files /dev/null and b/src/favicon.ico differ diff --git a/src/index.html b/src/index.html index 32bbdbd..7c6020d 100644 --- a/src/index.html +++ b/src/index.html @@ -5,6 +5,26 @@

MQTT Demo with Mosca

- + + diff --git a/src/mqtt.mjs b/src/mqtt.mjs index dc4934d..4d5192e 100644 --- a/src/mqtt.mjs +++ b/src/mqtt.mjs @@ -2,22 +2,23 @@ import mosca from 'mosca'; // source: https://github.com/mcollina/mosca/wiki/Mosca-basic-usage -export default function createMQTTServer(port = 1883) { +export default function createMQTTServer(port) { const moscaSettings = { - port, persistence: { factory: mosca.persistence.LevelUp, path: 'db', }, }; + if (port) moscaSettings.port = port; + const server = new mosca.Server(moscaSettings); const setup = () => { console.log('Mosca server is up and running on port:', moscaSettings.port); const message = { - topic: '/hello/world', + topic: 'hello/world', payload: 'abdce', // or a Buffer qos: 0, // 0, 1, or 2 retain: true, // retain message for future subscribers @@ -33,12 +34,7 @@ export default function createMQTTServer(port = 1883) { // fired when a message is published server.on('published', packet => { - console.log( - 'published event', - packet.retain ? '(persisted)' : '', - packet.topic, - packet.payload - ); + console.log('MQTT:', packet.retain ? '(persisted)' : '', [packet.topic, packet.payload].join(': ')); }); return server; diff --git a/src/server.mjs b/src/server.mjs index cdc50af..51c1caa 100644 --- a/src/server.mjs +++ b/src/server.mjs @@ -4,7 +4,6 @@ import path from 'path'; import createMQTT from './mqtt.mjs'; const serverPort = process.env.PORT || 8080; -const mqttPort = 1883; const sendError = (err, res) => { console.error(err); @@ -12,33 +11,36 @@ const sendError = (err, res) => { res.end('oh no!'); }; -http +const sendFile = (filepath, res, contentType = 'text/plain') => { + fs.readFile(filepath, (err, content) => { + if (err) { + sendError(err, res); + return; + } + + res.writeHead(200, { 'Content-Type': contentType }); + res.end(content); + }); +}; + +const webServer = http .createServer((req, res) => { + console.log(req.method, req.url); + switch (req.url) { case '/': { - fs.readFile(path.resolve(__dirname, 'index.html'), (err, content) => { - if (err) { - sendError(err, res); - return; - } - - res.writeHead(200, { 'Content-Type': 'text/html' }); - res.end(content); - }); + sendFile(path.resolve(__dirname, 'index.html'), res, 'text/html'); break; } - case '/client.js': { + case '/mqtt.js': { const clientPath = path.join(path.dirname(require.resolve('mosca')), 'public', 'mqtt.js'); - fs.readFile(clientPath, (err, content) => { - if (err) { - sendError(err, res); - return; - } + sendFile(clientPath, res, 'text/javascript'); + break; + } - res.writeHead(200, { 'Content-Type': 'text/javascript' }); - res.end(content); - }); + case '/favicon.ico': { + sendFile(path.resolve(__dirname, 'favicon.ico'), res, 'image/x-icon'); break; } @@ -51,5 +53,6 @@ http .listen(serverPort) .on('listening', () => { console.log('Webserver listening on port:', serverPort); - createMQTT(mqttPort); + const mqttServer = createMQTT(); + mqttServer.attachHttpServer(webServer); });