UNPKG

domotz-remote-pawn

Version:

Domotz Agent

74 lines (63 loc) 2.35 kB
/** 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;