Use a timer to try reconnecting to the XMPP server only each 2 seconds

When the connection is lost, immediately try to reconnect, then try to
reconnect every 2 seconds.  This is much better than the previous “Try to
re-connect as fast as possible”.
This commit is contained in:
Florent Le Coz
2015-02-21 06:45:11 +01:00
parent 3032dc3580
commit a50ca30e76
6 changed files with 38 additions and 4 deletions
+3
View File
@@ -39,6 +39,7 @@ static std::set<std::string> kickable_errors{
XmppComponent::XmppComponent(std::shared_ptr<Poller> poller, const std::string& hostname, const std::string& secret):
TCPSocketHandler(poller),
ever_auth(false),
first_connection_try(true),
served_hostname(hostname),
secret(secret),
authenticated(false),
@@ -86,6 +87,7 @@ void XmppComponent::send_stanza(const Stanza& stanza)
void XmppComponent::on_connection_failed(const std::string& reason)
{
this->first_connection_try = false;
log_error("Failed to connect to the XMPP server: " << reason);
#ifdef SYSTEMDDAEMON_FOUND
sd_notifyf(0, "STATUS=Failed to connect to the XMPP server: %s", reason.data());
@@ -95,6 +97,7 @@ void XmppComponent::on_connection_failed(const std::string& reason)
void XmppComponent::on_connected()
{
log_info("connected to XMPP server");
this->first_connection_try = true;
XmlNode node("", nullptr);
node.set_name("stream:stream");
node["xmlns"] = COMPONENT_NS;
+6
View File
@@ -241,6 +241,12 @@ public:
* Whether or not we ever succeeded our authentication to the XMPP server
*/
bool ever_auth;
/**
* Whether or not this is the first consecutive try on connecting to the
* XMPP server. We use this to delay the connection attempt for a few
* seconds, if it is not the first try.
*/
bool first_connection_try;
private:
/**