domotz-remote-pawn
Version:
Domotz Agent
74 lines (63 loc) • 2.35 kB
JavaScript
/** This file is part of Domotz Agent.
* Copyright (C) 2016 Domotz Ltd
*
* Domotz Agent is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Domotz Agent is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Domotz Agent. If not, see <http://www.gnu.org/licenses/>.
**/
/**
*
* Created by Tommaso Latini <ipapalini@domotz.com> on 17/09/15.
*/
const BASE_RETRY_INTERVAL = 10000;
const MAX_RETRY_INTERVAL = 60 * 1000 * 5; // 5 minutes
var factory = function (proc, status, connection, consumer, channel) {
var retry_interval = BASE_RETRY_INTERVAL;
function retryConnection() {
console.info('AMQP - Retrying connection in ' + retry_interval + ' ms');
setTimeout(function () {
o.listen();
}, retry_interval);
}
function setAgentStatus() {
if (status.get() === status.RESTRICTED) {
status.set(status.CONFIGURED);
}
retry_interval = BASE_RETRY_INTERVAL;
}
function listen() {
var url = connection.createConnectionUrl();
connection.connect(url)
.then(connection.setSignalHandler)
.then(channel.create)
.then(channel.setEventHandler)
.then(consumer.consume)
.then(setAgentStatus)
.catch(function (err) {
console.error('AMQP - Connection refused with error: ' + err.message);
if (err.message.indexOf("403") > -1) {
status.set(status.RESTRICTED);
if (retry_interval < MAX_RETRY_INTERVAL) {
retry_interval += BASE_RETRY_INTERVAL;
}
}
console.error(err.stack);
o.retryConnection();
});
}
var o = {
retryConnection: retryConnection,
listen: listen
};
return o;
};
module.exports.factory = factory;