• simple-mqtt-server.js
  • const { log } = require("../src/util");
    
    const mqttUsername = "louis1";
    const mqttPassword = "!@#$LLam";
    
    class SimpleMqttServer {
        aedes = require("aedes")();
        server = require("net").createServer(this.aedes.handle);
    
        /**
         * @param {number} port Port to listen on
         */
        constructor(port) {
            this.port = port;
        }
    
        /**
         * Start the MQTT server
         * @returns {void}
         */
        start() {
            this.server.listen(this.port, () => {
                console.log("server started and listening on port ", this.port);
            });
        }
    }
    
    let server1 = new SimpleMqttServer(10000);
    
    server1.aedes.authenticate = function (client, username, password, callback) {
        if (username && password) {
            console.log(password.toString("utf-8"));
            callback(null, username === mqttUsername && password.toString("utf-8") === mqttPassword);
        } else {
            callback(null, false);
        }
    };
    
    server1.aedes.on("subscribe", (subscriptions, client) => {
        console.log(subscriptions);
    
        for (let s of subscriptions) {
            if (s.topic === "test") {
                server1.aedes.publish({
                    topic: "test",
                    payload: Buffer.from("ok"),
                }, (error) => {
                    if (error) {
                        log.error("mqtt_server", error);
                    }
                });
            }
        }
    
    });
    
    server1.start();