diff --git a/.eslintrc b/.eslintrc
index 351a023..3915d22 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -12,6 +12,7 @@
"import"
],
"rules": {
+ "no-console": 0,
"prettier/prettier": "error",
"import/no-extraneous-dependencies": [
"error", {
diff --git a/index.js b/index.js
index 7192a2e..789e89f 100644
--- a/index.js
+++ b/index.js
@@ -1,5 +1,3 @@
/* eslint no-global-assign: 0 */
require = require('@std/esm')(module);
-const mod = require('./src/server.mjs').default;
-
-module.exports = mod.default;
+require('./src/server.mjs').default;
diff --git a/src/index.html b/src/index.html
new file mode 100644
index 0000000..32bbdbd
--- /dev/null
+++ b/src/index.html
@@ -0,0 +1,10 @@
+
+
+
+ MQTT Demo with Mosca
+
+
+ MQTT Demo with Mosca
+
+
+
diff --git a/src/mqtt.mjs b/src/mqtt.mjs
new file mode 100644
index 0000000..dc4934d
--- /dev/null
+++ b/src/mqtt.mjs
@@ -0,0 +1,45 @@
+import mosca from 'mosca';
+
+// source: https://github.com/mcollina/mosca/wiki/Mosca-basic-usage
+
+export default function createMQTTServer(port = 1883) {
+ const moscaSettings = {
+ port,
+ persistence: {
+ factory: mosca.persistence.LevelUp,
+ path: 'db',
+ },
+ };
+
+ 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',
+ payload: 'abdce', // or a Buffer
+ qos: 0, // 0, 1, or 2
+ retain: true, // retain message for future subscribers
+ };
+
+ console.log('--- server publishing to mqtt ---');
+ server.publish(message, () => {
+ console.log('message published!');
+ });
+ };
+
+ server.on('ready', setup);
+
+ // fired when a message is published
+ server.on('published', packet => {
+ console.log(
+ 'published event',
+ packet.retain ? '(persisted)' : '',
+ packet.topic,
+ packet.payload
+ );
+ });
+
+ return server;
+}
diff --git a/src/server.mjs b/src/server.mjs
index 9d32c30..cdc50af 100644
--- a/src/server.mjs
+++ b/src/server.mjs
@@ -1,37 +1,55 @@
-import mosca from 'mosca';
+import http from 'http';
+import fs from 'fs';
+import path from 'path';
+import createMQTT from './mqtt.mjs';
-// source: https://github.com/mcollina/mosca/wiki/Mosca-basic-usage
+const serverPort = process.env.PORT || 8080;
+const mqttPort = 1883;
-const moscaSettings = {
- port: 1883,
- persistence: {
- factory: mosca.persistence.LevelUp,
- path: 'db',
- },
+const sendError = (err, res) => {
+ console.error(err);
+ res.writeHead(500, { 'Content-Type': 'text/plain' });
+ res.end('oh no!');
};
-const server = new mosca.Server(moscaSettings);
+http
+ .createServer((req, res) => {
+ switch (req.url) {
+ case '/': {
+ fs.readFile(path.resolve(__dirname, 'index.html'), (err, content) => {
+ if (err) {
+ sendError(err, res);
+ return;
+ }
-const setup = () => {
- console.log('Mosca server is up and running');
+ res.writeHead(200, { 'Content-Type': 'text/html' });
+ res.end(content);
+ });
+ break;
+ }
- const message = {
- topic: '/hello/world',
- payload: 'abdce', // or a Buffer
- qos: 0, // 0, 1, or 2
- retain: true, // retain message for future subscribers
- };
+ case '/client.js': {
+ const clientPath = path.join(path.dirname(require.resolve('mosca')), 'public', 'mqtt.js');
+ fs.readFile(clientPath, (err, content) => {
+ if (err) {
+ sendError(err, res);
+ return;
+ }
- server.publish(message, () => {
- console.log('message published!');
+ res.writeHead(200, { 'Content-Type': 'text/javascript' });
+ res.end(content);
+ });
+ break;
+ }
+
+ default: {
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
+ res.end('not found');
+ }
+ }
+ })
+ .listen(serverPort)
+ .on('listening', () => {
+ console.log('Webserver listening on port:', serverPort);
+ createMQTT(mqttPort);
});
-};
-
-server.on('ready', setup);
-
-// fired when a message is published
-server.on('published', packet => {
- console.log('published event', packet.retain ? '(persisted)' : '', packet.topic, packet.payload);
-});
-
-export default server;