/* * This file is a part of CMSLU -- Content Management System like Unix * and is not publicly distributed * * Copyright (c) 2009, Tomasz Sowa * All rights reserved. * */ #include "lastcontainer.h" LastItem::LastItem() { user_id = 0; ip = 0; session_id = 0; memset((char*)&start, 0, sizeof(start)); memset((char*)&end, 0, sizeof(end)); } bool LastItem::IsLoggedOut() { if( end.tm_sec == 0 && end.tm_min == 0 && end.tm_hour == 0 && end.tm_mday == 0 && end.tm_mon == 0 && end.tm_year == 0 ) return false; return true; } LastContainer::LastContainer() { } LastContainer::Iterator LastContainer::Begin() { return last_tab.begin(); } LastContainer::Iterator LastContainer::End() { return last_tab.end(); } LastContainer::Iterator LastContainer::FindNotLoggedOut(long user_id, long session_id) { LastTab::iterator i; for(i=last_tab.begin() ; i!=last_tab.end() ; ++i) { if( i->user_id == user_id && i->session_id == session_id && !i->IsLoggedOut() ) return i; } return last_tab.end(); } void LastContainer::UserLogin(long user_id, const std::string & name, unsigned int ip, long session_id) { LastTab::iterator i = FindNotLoggedOut(user_id, session_id); if( i != last_tab.end() ) { log << log1 << "LC: such a user and session_id exist, not added as a new one" << logend; return; } if( last_tab.size() >= LAST_TABLE_SIZE ) last_tab.erase(last_tab.begin()); LastItem li; li.user_id = user_id; li.name = name; li.ip = ip; li.session_id = session_id; time_t t = std::time(0); li.start = *localtime(&t); last_tab.insert(last_tab.end(), li); log << log2 << "LC: added user: " << name << " into the last table" << logend; } void LastContainer::UserLogout(long user_id, long session_id) { LastTab::iterator i = FindNotLoggedOut(user_id, session_id); if( i != last_tab.end() ) { time_t t = std::time(0); i->end = *localtime(&t); } else { log << log1 << "LC: there is no such a user to log out" << logend; } }