Introvertuous / react-native-mqtt

Mqtt client for react native.
MIT License
158 stars 30 forks source link

no concurrent publisher support #34

Open Aakash007-ai opened 1 year ago

Aakash007-ai commented 1 year ago

Hello , i am facing an issue for concurrent user. I am not able to send data to broker if one publisher is already connected.

here is my configuration

import init from 'react_native_mqtt'; import AsyncStorage from '@react-native-async-storage/async-storage'; import DeviceInfo from 'react-native-device-info';

init({ size: 10000, storageBackend: AsyncStorage, defaultExpires: 1000 3600 24, enableCache: true, sync: {}, });

const defaultConnectOptions = { reconnect: false, cleanSession: true, mqttVersion: 3, keepAliveInterval: 60, timeout: 60 }

class MQTTConnection { constructor(host, port, clientID) { this.mqtt = new Paho.MQTT.Client(host, port, clientID); this.QOS = 1; this.RETAIN = true; this.channel = 'test'; this.clientID = "device"; //this.clientID = 'new_mqtt_test' }

connect(host, port, options = null) {
    this.clientID = DeviceInfo.getBrand();

    if (options) {
        this.QOS = options.qos;
        this.RETAIN = options.retain;
    }

    let currentTime = new Date();
    // let clientID = currentTime + uuid.v1();
    // clientID = clientID.slice(0, 23);
    // console.log('clientID: ', clientID)

    this.mqtt.onConnectionLost = (res) => {
        this.onMQTTLost;
        console.log("this.mqtt.onConnectionLost"+res)
    };
    this.mqtt.onMessageArrived = (message) => {
        this.onMQTTMessageArrived(message);
    };
    this.mqtt.onMessageDelivered = (message) => {
        this.onMQTTMessageDelivered(message);
    };

    const connectOptions = options ? options : defaultConnectOptions;

    console.log("calling connect")

    this.mqtt.connect({
        onSuccess: ()=>{
            console.log('debug inside connect success .......')
        },
        onFailure: ()=>{
            console.log('debug inside connect failure.....')
        },
        ...connectOptions
    });
}

onMQTTSuccess = () => {
    this.onMQTTConnect()
}

onMQTTFailure = () => {
    this.onMQTTLost()
}

subscribeChannel(channel) {
    console.log('MQTTConnection subscribeChannel: ', channel)
    if (!this.mqtt || !this.mqtt.isConnected()) {
        return;
    }
    this.mqtt.subscribe(channel, this.QOS);
}

unsubscribeChannel(channel) {
    console.log('MQTTConnection unsubscribeChannel: ', channel)
    if (!this.mqtt || !this.mqtt.isConnected()) {
        return;
    }
    this.mqtt.unsubscribe(channel);
}

send(payload) {
    console.log('MQTTConnection send: ')
    if (!this.mqtt || !this.mqtt.isConnected()) {
        return;
    }

    if (!this.channel || !payload) {
        return false;
    }

    let now = new Date()
    let options = { timeZone: 'Asia/Kolkata' };
    let currentTimeIST = now.toLocaleString('en-US', options);

    //let utcString = now.toUtring();
    payload = `[${this.clientID}][${currentTimeIST}] : ${payload} `

    console.log(payload)

    //console.log(`MQTTConnection send publish channel: ${channel}, payload: ${payload} qos: ${this.QOS} retained: ${this.RETAIN}`)
    this.mqtt.publish(this.channel, payload, this.QOS, this.RETAIN);
}

close() {
    this.mqtt && this.mqtt.disconnect();
    this.mqtt = null;
}

set userID (newID) {
    this.clientID = newID;
}

}

// let client = null

// if (!client){ // client = new MQTTConnection('13.233.185.239', 8083,'ClientId'); // // client = new MQTTConnection('13.233.185.239', 8083,'ClientId'); // client.connect() // } //const client= new MQTTConnection('13.233.185.239', 8083,'ClientId');

export default MQTTConnection;

MQTTConnection.prototype.onMQTTConnect = ()=>{console.log('debug connect....')} MQTTConnection.prototype.onMQTTLost = ()=>{console.log('debug lost...')} MQTTConnection.prototype.onMQTTMessageArrived = ()=>{console.log('debug arrived...')} MQTTConnection.prototype.onMQTTMessageDelivered = ()=>{console.log('debug delivered...')}