#include "heartbeat.h" #include "user_manager.h" BeatMonitor::BeatMonitor(int delay) { m_delay = delay; Create(); } wxThread::ExitCode BeatMonitor::Entry() { while (!killsignal) { users_mutex.Lock(); time_t tnow = time((time_t *) NULL); // run through each user with a short ms sleep between each so as not to use up cpu time for (unsigned int i=0; i < users->GetCount(); i++) { UserData *tmp = &users->Item(i); if ((tnow - tmp->lastPing) > 30) { // reconnect users if (tmp->prev!=NULL && tmp->prev!=tmp) { tmp->prev->next = tmp->next; tmp->next->prev = tmp->prev; UserManagement::UserEvent evt; evt.sEventType = "CONNECT"; evt.data1 = tmp->prev; evt.data2 = tmp->next; UserManagement::UserManager::getManager()->QueueEvent(evt); } UserTable *table = new UserTable(); if (!table->Open()) { // An error occurred opening (setting up) the table wxLogError(wxT("Beatmonitor:Failed to open usertable for insertion of data!")); continue; } if (table->FetchByName(tmp->username)) { table->isOnline = 0; table->Update(); table->GetDb()->CommitTrans(); } users->Remove(tmp); } } users_mutex.Unlock(); wxThread::Sleep(m_delay); } return 0; }