diff --git a/maintray.cpp b/maintray.cpp index 3d74fb4..f416010 100644 --- a/maintray.cpp +++ b/maintray.cpp @@ -24,6 +24,7 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q connect(netctrl, NetController::stateChanged, this, [this](NetController::State state){ switch (state) { case NetController::Online: + isForceLogin = false; setIcon(QIcon(tr(":/icon/favicon.ico"))); if(!muteAction->isChecked()) showMessage(tr("网络已连接"),tr("校园网登陆成功"), this->icon(), msgDur); @@ -31,11 +32,13 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q logoutAction->setEnabled(true); break; case NetController::Offline: - setIcon(QIcon(tr(":/icon/offline.ico"))); - if(!muteAction->isChecked()) - showMessage(tr("网络已断开"),tr("校园网已注销"), this->icon(), msgDur); - loginAction->setEnabled(true); - logoutAction->setEnabled(true); + if(!isForceLogin){ + setIcon(QIcon(tr(":/icon/offline.ico"))); + if(!muteAction->isChecked()) + showMessage(tr("网络已断开"),tr("校园网已注销"), this->icon(), msgDur); + loginAction->setEnabled(true); + logoutAction->setEnabled(true); + } break; case NetController::Disconnected: setIcon(QIcon(tr(":/icon/offline.ico"))); @@ -75,6 +78,7 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q muteAction->setToolTip(tr("勿扰模式下不会发出通知")); connect(loginAction, QAction::triggered, this,[this](){ + isForceLogin = true; netctrl->sendLogoutRequest(); netctrl->sendLoginRequest(); isForceLogout = false; diff --git a/maintray.h b/maintray.h index 31394ec..3e3dc0b 100644 --- a/maintray.h +++ b/maintray.h @@ -28,7 +28,8 @@ private: OptionsWindow opWindow; QTimer *autoLoginTimer; //自动重连定时器 - bool isForceLogout = false; //自动重连flag + bool isForceLogout = false; + bool isForceLogin = false; NetController::State currentState = NetController::Unknown; //当前状态 @@ -39,7 +40,7 @@ private: void setAutoStart(bool set); QByteArray user, passwd; - int msgDur = 1000; //通知持续时间 + int msgDur = 500; //通知持续时间 int checkInterval = 1000; //查询状态定时器周期 diff --git a/netcontroller.cpp b/netcontroller.cpp index d21d108..c3e8459 100644 --- a/netcontroller.cpp +++ b/netcontroller.cpp @@ -24,8 +24,9 @@ NetController::NetController(QByteArray id, QByteArray passwd, QObject *parent) void NetController::checkState() { sendCheckRequest(); - if(NEUState==Offline&&lastState!=Offline) + if(NEUState == Offline && lastState != Offline && offlineCount++ > 1) { + offlineCount = 0; lastState = Offline; emit stateChanged(lastState); } @@ -97,6 +98,7 @@ void NetController::handleResponse(QNetworkReply *reply) } else { + offlineCount = 0; NEUState = Online; QStringList infoList = status.split(','); emit sendInfo(infoList[0], infoList[1], infoList[2], infoList[5]); @@ -104,6 +106,7 @@ void NetController::handleResponse(QNetworkReply *reply) } else { + offlineCount = 0; NEUState = Disconnected; } } diff --git a/netcontroller.h b/netcontroller.h index 0d8931d..7b3ba39 100644 --- a/netcontroller.h +++ b/netcontroller.h @@ -28,6 +28,7 @@ private: QString offlineString = "not_online"; QByteArray checkParam, username, password; State NEUState = Unknown, lastState = Unknown; + int offlineCount = 0; QNetworkAccessManager manager; QNetworkRequest request;