// 1.user not in meeting // 2.user in meeting and not is admin -->set offline // 3.user in meeting and is admin --> destroy meeting int Msm::logout(string id) { if (!have_member(id)) { LOG(LOG_ERROR, "%s not login.", id.c_str()); return -1; } Member *m = get_member(id); int fd = m->get_sockfd(); if (fd != -1) { if (epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, &ev) == -1) { LOG(LOG_ERROR, "epoll_ctl del %d failed: %s", fd, strerror(errno)); } close(fd); m->set_sockfd(-1); LOG(LOG_INFO, "close sockfd: %d", fd); } if (m->get_meeting() != NULL) { if (m->get_meeting()->get_admin() == id) { destroy_meeting(m->get_meeting()->get_id()); } else { m->set_offline(); } } return unregister_member(id); }
void CSE_ALifeOnlineOfflineGroup::notify_on_member_death(MEMBER *member) { unregister_member (member->ID); }