mirror of
https://github.com/tnodir/fort
synced 2024-11-15 11:55:09 +00:00
RpcManager: Try to reconnect to service on error, Part 2
This commit is contained in:
parent
ec3a58a301
commit
12d4bb0116
@ -114,26 +114,37 @@ void ControlWorker::setupForAsync()
|
||||
connect(socket(), &QLocalSocket::readyRead, this, &ControlWorker::processRequest);
|
||||
}
|
||||
|
||||
void ControlWorker::setServerName(const QString &name)
|
||||
void ControlWorker::setServerName(const QString &v)
|
||||
{
|
||||
socket()->setServerName(name);
|
||||
m_serverName = v;
|
||||
}
|
||||
|
||||
bool ControlWorker::connectToServer()
|
||||
{
|
||||
socket()->connectToServer();
|
||||
socket()->connectToServer(serverName());
|
||||
|
||||
if (!socket()->waitForConnected(150)) {
|
||||
if (!socket()->waitForConnected(100)) {
|
||||
qCWarning(LC) << "Connection error:" << socket()->state() << socket()->errorString();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (socket()->state() != QLocalSocket::ConnectedState) {
|
||||
qCWarning(LC) << "Connection state error:" << socket()->state();
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ControlWorker::reconnectToServer()
|
||||
{
|
||||
close();
|
||||
|
||||
if (isTryReconnect() && isConnected())
|
||||
return true;
|
||||
|
||||
int reconnectCount = 2;
|
||||
do {
|
||||
if (connectToServer())
|
||||
return true;
|
||||
} while (--reconnectCount > 0);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void ControlWorker::close()
|
||||
@ -144,7 +155,7 @@ void ControlWorker::close()
|
||||
|
||||
void ControlWorker::onDisconnected()
|
||||
{
|
||||
if (isTryReconnect() && connectToServer())
|
||||
if (isTryReconnect() && reconnectToServer())
|
||||
return;
|
||||
|
||||
emit disconnected();
|
||||
|
@ -26,6 +26,9 @@ public:
|
||||
|
||||
quint32 id() const { return m_id; }
|
||||
|
||||
QString serverName() const { return m_serverName; }
|
||||
void setServerName(const QString &v);
|
||||
|
||||
QLocalSocket *socket() const { return m_socket; }
|
||||
|
||||
bool isConnected() const;
|
||||
@ -33,8 +36,8 @@ public:
|
||||
|
||||
void setupForAsync();
|
||||
|
||||
void setServerName(const QString &name);
|
||||
bool connectToServer();
|
||||
bool reconnectToServer();
|
||||
|
||||
static QByteArray buildCommandData(Control::Command command, const QVariantList &args = {});
|
||||
bool sendCommandData(const QByteArray &commandData);
|
||||
@ -99,6 +102,7 @@ private:
|
||||
RequestHeader m_requestHeader;
|
||||
QByteArray m_requestBuffer;
|
||||
|
||||
QString m_serverName;
|
||||
QLocalSocket *m_socket = nullptr;
|
||||
};
|
||||
|
||||
|
@ -401,7 +401,7 @@ void RpcManager::sendResult(ControlWorker *w, bool ok, const QVariantList &args)
|
||||
|
||||
bool RpcManager::invokeOnServer(Control::Command cmd, const QVariantList &args)
|
||||
{
|
||||
if (!client()->isConnected()) {
|
||||
if (!client()->isConnected() && !client()->reconnectToServer()) {
|
||||
IoC<WindowManager>()->showErrorBox(tr("Service isn't available."));
|
||||
return false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user