void KUser::FlushLoginUser() { if(conf.user_time_out<=0) return; int now_time=time(NULL); KUser_int_map::iterator it; m_lock.Lock(); for(it=m_user.begin();it!=m_user.end();){ if(now_time-(*it).second.last_active_time>conf.user_time_out){ #ifndef _WIN32 (*it).second.user->state=0; m_user.erase(it); it++; #else it=m_user.erase(it); #endif }else{ it++; } } m_lock.Unlock(); }
bool KUser::ForceLogout(const char *user,bool use_lock) { KUser_int_map::iterator it; if(use_lock) m_lock.Lock(); for(it=m_user.begin();it!=m_user.end();it++){ if((*it).second.user->user==user){ (*it).second.user->state=0; klog(RUN_LOG,"Force logou user %s success\n",(*it).second.user->user.c_str()); m_user.erase(it); m_lock.Unlock(); return true; } } if(use_lock) m_lock.Unlock(); return false; }
int KUser::Logout(unsigned long ip) { unsigned stay_time=0; KUser_int_map::iterator it; m_lock.Lock(); it=m_user.find(ip); if(it==m_user.end()){ m_lock.Unlock(); return stay_time; } stay_time=time(NULL)-(*it).second.login_time; //m_user.total_time+=stay_time; (*it).second.user->total_time+=stay_time; (*it).second.user->state=0;//set the user logout klog(RUN_LOG,"user %s logout success\n",(*it).second.user->user.c_str()); m_user.erase(it); m_lock.Unlock(); return stay_time; }