feat: add working client-side example
This commit is contained in:
BIN
src/favicon.ico
Normal file
BIN
src/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
@@ -5,6 +5,26 @@
|
||||
</head>
|
||||
<body>
|
||||
<h1>MQTT Demo with Mosca</h1>
|
||||
<script src="/client.js"></script>
|
||||
<script src="/mqtt.js"></script>
|
||||
<script>
|
||||
/* eslint no-console: 0 */
|
||||
/* eslint-env browser */
|
||||
/* global mqtt */
|
||||
|
||||
// see https://github.com/mcollina/mosca/wiki/MQTT-over-Websockets
|
||||
|
||||
const client = mqtt.connect();
|
||||
|
||||
client.subscribe('mqtt/demo');
|
||||
|
||||
client.on('message', (topic, payload) => {
|
||||
console.log([topic, payload].join(': '));
|
||||
// client.end();
|
||||
});
|
||||
|
||||
client.publish('mqtt/demo', `hello world! ${new Date().getTime()}`, {
|
||||
retain: true,
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
14
src/mqtt.mjs
14
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;
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user