#include <LocalMyList/MyList>
#include <AniDBUdpClient/Client>
#include <QSqlError>
+#include <QTimer>
#include <QDebug>
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
LocalMyList::instance()->setupUdpClient();
AniDBUdpClient::Client::instance()->setIdlePolicy(AniDBUdpClient::KeepAliveIdlePolicy);
+ connect(AniDBUdpClient::Client::instance(), SIGNAL(connectionError()), this, SLOT(handleUdpClientError()));
LocalMyList::instance()->setupRequestHandler();
}