Skip to content

Instantly share code, notes, and snippets.

@ikeyasu
Created December 13, 2015 02:57
Show Gist options
  • Save ikeyasu/e2696b8155d6597cd2ea to your computer and use it in GitHub Desktop.
Save ikeyasu/e2696b8155d6597cd2ea to your computer and use it in GitHub Desktop.
var mqtt = require('mqtt'),
tlsReader = require('./lib/tls-reader'),
isUndefined = require('./lib/is-undefined'),
config1 = require('./local-setting-mqtt1.json'),
config2 = require('./local-setting-mqtt2.json');
if (!isUndefined(config1.keyPath)) tlsReader(config1);
if (!isUndefined(config2.keyPath)) tlsReader(config2);
var client1 = mqtt.connect(config1);
var client2 = mqtt.connect(config2);
var sentMessagesFrom1 = [];
var sentMessagesFrom2 = [];
function popSentMessage(client, messageData) {
var sentMessages = (client === client1) ? sentMessagesFrom2 : sentMessagesFrom1;
for (var i = 0; i < sentMessages.length; i++) {
if (sentMessages[i].topic === messageData.topic &&
sentMessages[i].message.toString() == messageData.message.toString()) {
var sentMessage = sentMessages[i];
sentMessages.splice(i, 1);
return sentMessage;
}
}
return null;
}
function pushSentMessage(client, messageData) {
if (client === client1) {
sentMessagesFrom1.push(messageData);
} else {
sentMessagesFrom2.push(messageData);
}
}
function debugSentMessages() {
if (sentMessagesFrom1.length > 0) {
console.log("sentMessagesFrom1: ");
for (var i = 0; i < sentMessagesFrom1.length; i++) {
console.log(sentMessagesFrom1[i]);
}
}
if (sentMessagesFrom2.length > 0) {
console.log("sentMessagesFrom2: ");
for (var i = 0; i < sentMessagesFrom2.length; i++) {
console.log(sentMessagesFrom2[i]);
}
}
}
function publish(client, topic, message) {
var messageData = {
topic: topic,
message: message,
created: new Date()
};
if (popSentMessage(client, messageData) !== null) {
return false;
}
debugSentMessages();
pushSentMessage(client, messageData);
client.publish(topic, message);
return true;
}
client1.on('connect', function() {
console.log('connected to ' + this.options.host);
this.subscribe(this.options.subscribedTopic);
});
client1.on('message', function(topic, message, packet) {
console.log(this.options.host + " says: " + message.toString());
publish(client2, topic, message);
});
client2.on('connect', function() {
console.log('connected to ' + this.options.host);
this.subscribe(this.options.subscribedTopic);
});
client2.on('message', function(topic, message, packet) {
console.log(this.options.host + " says: " + message.toString());
publish(client1, topic, message);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment