feat: add working client-side example

This commit is contained in:
2018-01-11 20:03:26 -07:00
parent 60c6fb1fdf
commit 06ffb32e0f
4 changed files with 50 additions and 31 deletions

BIN
src/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -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>

View File

@@ -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;

View File

@@ -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
.createServer((req, res) => {
switch (req.url) {
case '/': {
fs.readFile(path.resolve(__dirname, 'index.html'), (err, content) => {
const sendFile = (filepath, res, contentType = 'text/plain') => {
fs.readFile(filepath, (err, content) => {
if (err) {
sendError(err, res);
return;
}
res.writeHead(200, { 'Content-Type': 'text/html' });
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 '/': {
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);
});