void CConferenceInfo::enableVideoRecv(int fromMemberIndex, int toMemberIndex, bool enable) { CConferenceMember::pointer fromMember; CConferenceMember::pointer toMember; CLockMap<void*, CConferenceMember::pointer>::iterator iterMember; boost::mutex::scoped_lock lockMember(m_members.mutex()); for (iterMember=m_members.begin(); iterMember!=m_members.end(); iterMember++) { CConferenceMember::pointer member = iterMember->second; if (member->getIndex() == fromMemberIndex) { fromMember = member; } if (member->getIndex() == fromMemberIndex) { toMember = member; } if (fromMember.get() != 0 && toMember.get() != 0) { break; } } if (enable) { // }else { } }
void CConferenceInfo::enableVideoRecv(bool enable) { CLockMap<void*, CConferenceMember::pointer>::iterator iterMember; boost::mutex::scoped_lock lockMember(m_members.mutex()); for (iterMember=m_members.begin(); iterMember!=m_members.end(); iterMember++) { iterMember->second->setVideoRecv(enable); } }
void CConferenceInfo::enableVideoRecvIndex(int memberIndex, int allowMemberIndex) { CLockMap<void*, CConferenceMember::pointer>::iterator iterMember; boost::mutex::scoped_lock lockMember(m_members.mutex()); for (iterMember=m_members.begin(); iterMember!=m_members.end(); iterMember++) { CConferenceMember::pointer member = iterMember->second; if (member->getIndex() == memberIndex) { member->setRecvIndex(allowMemberIndex); return; } } }
void CConferenceInfo::closeConference(void) { m_currentIndex = 0; CLockMap<void*, CConferenceMember::pointer>::iterator iterMember; boost::mutex::scoped_lock lockMember(m_members.mutex()); for (iterMember=m_members.begin(); iterMember!=m_members.end(); iterMember++) { CConferenceMember::pointer member = iterMember->second; member->setClosed(true); if (m_handler) m_handler->onMemberClosed(member, true); } m_members.clear(false); }
void CConferenceInfo::enableVideoSend(int memberIndex, bool enable) { CLockMap<void*, CConferenceMember::pointer>::iterator iterMember; boost::mutex::scoped_lock lockMember(m_members.mutex()); for (iterMember=m_members.begin(); iterMember!=m_members.end(); iterMember++) { CConferenceMember::pointer member = iterMember->second; if (member->getIndex() == memberIndex) { member->setVideoSend(enable); }else if (enable) { // 其他要设为 false member->setVideoSend(false); } } }
int dc_close(int fd) { int res = 0; int tmp; int32_t size; int32_t closemsg[6]; int msglen; struct vsp_node *node; #ifdef DC_CALL_TRACE showTraceBack(); #endif /* nothing wrong ... yet */ dc_errno = DEOK; node = delete_vsp_node(fd); if (node == NULL) { /* we have not such file descriptor, so lets give a try to system */ dc_debug(DC_INFO, "Using system native close for [%d].", fd); return system_close(fd); } if ( node->lcb != NULL ) { dc_lcb_clean( node ); } dc_real_fsync( node ); if(node->unsafeWrite > 1) { size = htonl(-1); /* send end of data */ writen(node->dataFd, (char *) &size, sizeof(size), NULL); /* FIXME: error detection missing */ if (get_fin(node) < 0) { dc_debug(DC_ERROR, "dc_close: mover did not FIN the data blocks."); res = -1; } } if(node->reference == 0 ) { if( (node->sum != NULL) && ( node->sum->isOk == 1 ) ) { closemsg[0] = htonl(20); closemsg[2] = htonl(12); closemsg[3] = htonl(DCAP_DATA_SUM); closemsg[4] = htonl(node->sum->type); closemsg[5] = htonl(node->sum->sum); msglen = 6; dc_debug(DC_INFO, "File checksum is: %u", node->sum->sum); }else{ closemsg[0] = htonl(4); msglen = 2; } closemsg[1] = htonl(IOCMD_CLOSE); /* actual command */ dc_debug(DC_IO, "Sending CLOSE for fd:%d ID:%d.", node->dataFd, node->queueID); check_timeout_envar(); dcap_set_alarm(closeTimeOut > 0 ? closeTimeOut : DCAP_IO_TIMEOUT/4); tmp = sendDataMessage(node, (char *) closemsg, msglen*sizeof(int32_t), ASCII_OK, NULL); /* FIXME: error detection missing */ if( tmp < 0 ) { dc_debug(DC_ERROR, "sendDataMessage failed."); /* ignore close errors if file was open for read */ if(node->flags & O_WRONLY) { res = -1; } if(isIOFailed) { isIOFailed = 0; /* command line dwon */ if(!ping_pong(node)) { /* remove file descriptor from the list of control lines in use */ lockMember(); deleteMemberByValue(node->fd); unlockMember(); pollDelete(node->fd); close_control_socket(node->fd, node->tunnel); } } } dcap_set_alarm(0); deleteQueue(node->queueID); } /* * Even if there is still a reference to the dcap session, * we have to close local socket descriptor. */ close_data_socket(node->dataFd); node_destroy(node); return res; }