0

i have an application that connected to a topic on MQTT broker server, i connect using my javascript code that works over web socket port. my problem that when i put my application on webserver, i keep connect and send messages all time .. never stop that . how can solve my code to connect just once and never connect again unless i got disconnected. here is my code.

client = new Paho.MQTT.Client("m23.cloudmqtt.com", 38788,"clientId-O8R8jUxaRM");
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
var options = {
  useSSL: true,
  userName: "peelmimp",
  password: "iold2UAoIs8T",
  onSuccess:onConnect,
  onFailure:doFail
}
client.connect(options);
// called when the client connects
function onConnect() {
  // Once a connection has been made, make a subscription and send a message.
  console.log("onConnect");
  client.subscribe("sensor8");
  message = new Paho.MQTT.Message(" CloudMQTT");
  message.destinationName = "sensor8";
  client.send(message);
}

function doFail(e){
  console.log(e);
}

// called when the client loses its connection
function onConnectionLost(responseObject) {
  if (responseObject.errorCode !== 0) {
    console.log("onConnectionLost:"+responseObject.errorMessage);
    client.connect(options);
  }
}

// called when a message arrives
function onMessageArrived(message) {
  console.log("onMessageArrived:"+message.payloadString);
  var x = message.payloadString;
  if(x == 1){ //park spot number 1
    document.getElementById("park1").style.backgroundColor = "orange";
    document.getElementById("park1p").style.fontSize="40px";
    document.getElementById("park1p").innerHTML="A car is going to park at spot number 1";
  }
  if(x == 2){ //car parked at park1
    document.getElementById("park1").style.backgroundColor = "red";
    document.getElementById("park1p").innerHTML="spot number 1 is not available";
  }
  if(x == 3){ //car left park 1 and it is available
    document.getElementById("park1").style.backgroundColor = "green";
    document.getElementById("park1p").innerHTML="spot number 1 is available";
  }
  if(x == 4){ //park spot number 2
    document.getElementById("park2").style.backgroundColor = "orange";
    document.getElementById("park2p").style.fontSize="40px";
    document.getElementById("park2p").innerHTML="A car is going to park at spot number 2";
  }
  if(x == 5){ //car parked at park2
    document.getElementById("park2").style.backgroundColor = "red";
    document.getElementById("park2p").innerHTML="spot number 2 is not available";
  }
  if(x == 6){ //car left park 2 and it is available
    document.getElementById("park2").style.backgroundColor = "green";
    document.getElementById("park2p").innerHTML="spot number 2 is available";
  }
  if(x == 7){ //park spot number 3
    document.getElementById("park3").style.backgroundColor = "orange";
    document.getElementById("park3p").style.fontSize="40px";
    document.getElementById("park3p").innerHTML="A car is going to park at spot number 3";
  }
  if(x == 8){ //car parked at park3
    document.getElementById("park3").style.backgroundColor = "red";
    document.getElementById("park3p").innerHTML="spot number 3 is not available";
  }
  if(x == 9){ //car left park 3 and it is available
    document.getElementById("park3").style.backgroundColor = "green";
    document.getElementById("park3p").innerHTML="spot number 3 is available";
  }
  if(x == 10){ //park spot number 4
    document.getElementById("park4").style.backgroundColor = "orange";
    document.getElementById("park4p").style.fontSize="40px";
    document.getElementById("park4p").innerHTML="A car is going to park at spot number 4";
  }
  if(x == 11){ //car parked at park4
    document.getElementById("park4").style.backgroundColor = "red";
    document.getElementById("park4p").innerHTML="spot number 4 is not available";
  }
  if(x == 12){ //car left park 4 and it is available
    document.getElementById("park4").style.backgroundColor = "green";
    document.getElementById("park4p").innerHTML="spot number 4 is available";
  }

}
DrJempo
  • 75
  • 1
  • 9

1 Answers1

0

You have a single fixed client id and the code automatically reconnects when disconnected.

In your on('connected') callback you publish a message.

Since the broker will only allow a single client to be connected with any given client id it will always kick the oldest one off when a new one connects. This will trigger a reconnection loop as soon as more than one browser opens the page. Hence triggering the message published on connection to be published multiple times.

hardillb
  • 54,545
  • 11
  • 67
  • 105