Fixed timeout
This commit is contained in:
20
src/app.cpp
20
src/app.cpp
@@ -1012,14 +1012,18 @@ void App::showHistory(Wt::Json::Object broadcast) {
|
||||
|
||||
void App::connectionTimedOut() {
|
||||
showLogin();
|
||||
loginTimer_->stop();
|
||||
timeoutRemainingTimer_->stop();
|
||||
menuContainer_->clear();
|
||||
userListContainer_->clear();
|
||||
triggerUpdate();
|
||||
}
|
||||
|
||||
void App::addLoginTimeView() {
|
||||
auto loggedinTimeWidget = menuContainer_->addNew<Wt::WText>();
|
||||
loggedinTimeWidget->setStyleClass("menu-info-text");
|
||||
auto loginTimer = root()->addChild(std::make_unique<Wt::WTimer>());
|
||||
loginTimer->setInterval(std::chrono::seconds(1));
|
||||
loginTimer_ = root()->addChild(std::make_unique<Wt::WTimer>());
|
||||
loginTimer_->setInterval(std::chrono::seconds(1));
|
||||
auto loggedInRefresh = [=, this]() {
|
||||
auto currentLoginSeconds = currentlyLoggedInSeconds();
|
||||
int hours = currentLoginSeconds / 3600;
|
||||
@@ -1030,16 +1034,16 @@ void App::addLoginTimeView() {
|
||||
std::string elapsedTimeString = elapsedTimeStream.str();
|
||||
loggedinTimeWidget->setText(Wt::WString("In chat for {1}").arg(elapsedTimeString));
|
||||
};
|
||||
loginTimer->timeout().connect(loggedInRefresh);
|
||||
loginTimer_->timeout().connect(loggedInRefresh);
|
||||
loggedInRefresh();
|
||||
loginTimer->start();
|
||||
loginTimer_->start();
|
||||
}
|
||||
|
||||
void App::addTimeoutView() {
|
||||
auto timeoutRemainingWidget = menuContainer_->addNew<Wt::WText>();
|
||||
timeoutRemainingWidget->setStyleClass("menu-info-text");
|
||||
auto timeoutRemainingTimer = root()->addChild(std::make_unique<Wt::WTimer>());
|
||||
timeoutRemainingTimer->setInterval(std::chrono::milliseconds(500));
|
||||
timeoutRemainingTimer_ = root()->addChild(std::make_unique<Wt::WTimer>());
|
||||
timeoutRemainingTimer_->setInterval(std::chrono::milliseconds(500));
|
||||
auto timeoutRemainingRefresh = [=, this]() {
|
||||
auto remainingLoginSeconds = remainingSecondsToTimeout();
|
||||
int minutes = remainingLoginSeconds / 60;
|
||||
@@ -1050,9 +1054,9 @@ void App::addTimeoutView() {
|
||||
std::string elapsedTimeString = remainingTimeStream.str();
|
||||
timeoutRemainingWidget->setText(Wt::WString("Remaining time before logout is {1}").arg(elapsedTimeString));
|
||||
};
|
||||
timeoutRemainingTimer->timeout().connect(timeoutRemainingRefresh);
|
||||
timeoutRemainingTimer_->timeout().connect(timeoutRemainingRefresh);
|
||||
timeoutRemainingRefresh();
|
||||
timeoutRemainingTimer->start();
|
||||
timeoutRemainingTimer_->start();
|
||||
}
|
||||
|
||||
void App::itemChanged(Wt::WCheckBox *item, Wt::WContainerWidget *dropDownContainer, Wt::WPushButton *openButton, std::unordered_set<std::string> *saveItems) {
|
||||
|
||||
@@ -90,6 +90,8 @@ private:
|
||||
int messageCursorPosition_{-1};
|
||||
std::unique_ptr<Wt::WSound> messageReceived_;
|
||||
Search searchFields;
|
||||
Wt::WTimer *loginTimer_;
|
||||
Wt::WTimer *timeoutRemainingTimer_;
|
||||
void setMetaTags();
|
||||
void initApp();
|
||||
void reSetUser();
|
||||
|
||||
@@ -143,17 +143,22 @@ void Broadcast::run() {
|
||||
{"type", "timedout"},
|
||||
{"data", "dummy"}
|
||||
};
|
||||
std::vector<Client *> toDisconnect;
|
||||
for (;;) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||
for (auto clientToDisconnect: toDisconnect) {
|
||||
disconnect(clientToDisconnect);
|
||||
}
|
||||
toDisconnect.clear();
|
||||
if (stop_) {
|
||||
return;
|
||||
}
|
||||
std::unique_lock<std::mutex> lock(mutex_);
|
||||
for (auto &connection: connections_) {
|
||||
if (connection->client()->activitiesTimedOut()) {
|
||||
disconnect(connection->client());
|
||||
addMessageToSessionBroadcast(connection->sessionId(), timedoutBroadcast);
|
||||
continue;
|
||||
auto sessionId = connection->sessionId();
|
||||
toDisconnect.push_back(connection->client());
|
||||
addMessageToSessionBroadcast(sessionId, timedoutBroadcast);
|
||||
}
|
||||
if (connection->getBroadcasts().size() == 0) {
|
||||
continue;
|
||||
@@ -605,7 +610,7 @@ void Client::setActivity() {
|
||||
}
|
||||
|
||||
bool Client::activitiesTimedOut() {
|
||||
auto timeDifference = Wt::WDateTime::currentDateTime().secsTo(lastActivity_);
|
||||
auto timeDifference = lastActivity_.secsTo(Wt::WDateTime::currentDateTime());
|
||||
return timeDifference > timeoutSeconds;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ protected:
|
||||
void setLoggedIn();
|
||||
void setLoggedOut();
|
||||
private:
|
||||
const int timeoutSeconds {1800};
|
||||
const int timeoutSeconds {5};
|
||||
Wt::WDateTime lastActivity_;
|
||||
Wt::WDateTime loginTimeStamp_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user