]> Some of my projects - localmylist.git/commitdiff
Make AniOni handle UDP client errors.
authorAPTX <marek321@gmail.com>
Sat, 9 Jun 2012 17:06:20 +0000 (19:06 +0200)
committerAPTX <marek321@gmail.com>
Sat, 9 Jun 2012 17:06:20 +0000 (19:06 +0200)
anioni/anioni.cpp
anioni/anioni.h

index ab334043b7c59532f452d5bc42de1f89c43ac2de..2a9daabff3acc330bfbe81674fd4fe817e56d43a 100644 (file)
@@ -3,6 +3,7 @@
 #include <LocalMyList/MyList>
 #include <AniDBUdpClient/Client>
 #include <QSqlError>
+#include <QTimer>
 #include <QDebug>
 
 AniOni::AniOni(int argc, char **argv) :
@@ -12,11 +13,48 @@ AniOni::AniOni(int argc, char **argv) :
        setServiceFlags(QtServiceBase::CanBeSuspended);
 }
 
+void AniOni::handleUdpClientError()
+{
+       using namespace AniDBUdpClient;
+
+       qDebug() << "ERROR CODE" << Client::instance()->error();
+       LocalMyList::instance()->database()->log(tr("UDP Client connection error: %1")
+                                                                                        .arg(Client::instance()->errorString()), 3);
+
+       switch (Client::instance()->error())
+       {
+               case NoError:
+               break;
+
+               case HostLookupError:
+                       Client::instance()->clearErrors();
+                       QTimer::singleShot(1000, Client::instance(), SLOT(connect()));
+               break;
+
+               case BannedError:
+               case ServerError:
+               case ConnectionTimedOutError:
+                       Client::instance()->clearErrors();
+                       QTimer::singleShot(1000 * 60 * 40, Client::instance(), SLOT(connect()));
+               break;
+
+               case BindError:
+               case AuthenticationError:
+               case ClientBannedError:
+               case EncryptionError:
+               case UnknownError:
+               default:
+                       qWarning("Unrecoverable connection error");
+                       application()->exit(1);
+                       return;
+               break;
+       }
+}
+
 void AniOni::start()
 {
 #ifdef Q_OS_WIN
        QSettings s(QDir::currentPath() + "/anioni.ini", QSettings::IniFormat);
-       qDebug() << "Reading" << s.fileName();
 #elif Q_OS_UNIX
        QSettings s("/etc/anioni/anioni.ini", QSettings::IniFormat);
 #else
@@ -36,6 +74,7 @@ void AniOni::start()
 
        LocalMyList::instance()->setupUdpClient();
        AniDBUdpClient::Client::instance()->setIdlePolicy(AniDBUdpClient::KeepAliveIdlePolicy);
+       connect(AniDBUdpClient::Client::instance(), SIGNAL(connectionError()), this, SLOT(handleUdpClientError()));
 
        LocalMyList::instance()->setupRequestHandler();
 }
index f9bed38a0209aca1d440b9f206629ddbb48060c7..d743633e2a0c8e3755bea32cc5777101c534fa09 100644 (file)
@@ -12,6 +12,9 @@ public:
 signals:
        
 public slots:
+
+protected slots:
+       void handleUdpClientError();
        
 protected:
        void start();