Example #1
0
// 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);
}