ObjectResultPtr NoteFactory::create(const IntSeq& keys) { ConnectionHolder conn(_database); mysqlpp::Query query = conn.query(); query << "SELECT * FROM " << _noteTable << " WHERE noteId in ("; for (size_t i = 0; i < keys.size(); ++i) { query << keys.at(i) << ", "; } query << "0)"; mysqlpp::Result res = query.store(); ObjectResultPtr result = new ObjectResult; for (size_t i = 0; i < res.size(); ++i) { mysqlpp::Row row = res.at(i); NotePtr n = new Note; n->noteId = row["NOTEID"]; n->quoteeId = row["QUOTEEID"]; n->resource = row["RESOURCE"]; n->type = row["TYPE"]; n->unread = (int)row["UNREAD"] == 0 ? false : true; n->fromName = row["FROMNAME"].get_string(); n->fromId = row["FROMID"]; n->toId = row["TOID"]; n->ownerName = row["OWNERNAME"].get_string(); n->ownerId = row["OWNERID"]; n->title = row["TITLE"].get_string(); n->link = row["LINK"].get_string(); n->imageLink = row["IMAGELINK"].get_string(); n->timestamp = (time_t)mysqlpp::DateTime(row["TIMESTAMP"]); n->security = row["SECURITY"]; result->data[n->noteId] = n; } return result; }
TribeTinyViewSeq mop::hi::svc::model::UseredTribeManagerI::getMemberedTribeTinyViews(::Ice::Int userId, ::Ice::Int offset, ::Ice::Int limit, const Ice::Current& current) { UseredTribeServiceI& service = UseredTribeServiceI::instance(); IntSeq memberedTribeIds = service.getMemberedTribeSet(userId) ->getAll(offset, limit); TribeTinyViewSeq result; if (offset <= 0) { offset = 0; } if (limit <= 0) { limit = memberedTribeIds.size(); } for (int i = 0; i < memberedTribeIds.size(); ++i) { if (i < offset) { continue; } if (result.size() >= limit) { break; } try { result.push_back(service.getTribeTinyView(memberedTribeIds.at(i))); } catch (Ice::Exception& e) { } } return result; }
FeedMetaSeq UserFeedsI::getByTypes(const IntSeq& userids, ::Ice::Int begin, ::Ice::Int limit, const IntSeq& types, const ::Ice::Current& current) { ostringstream oss; oss << "UserFeedsI::getByTypes, userids.size: " << userids.size() << " begin: " << begin << " limit: " << limit; TimeCost tm = TimeCost::create(oss.str(), TimeCost::LOG_LEVEL_INFO); if(types.empty()) return getSegment(fs_.gets(userids, begin + limit), userids, begin, limit); return getSegment(fs_.gets_with_filter(userids, TypesFilter(types), IdsFilter(std::vector<string>()), begin + limit), userids, begin, limit); }
ObjectResultPtr UserAdsCacheManagerI::getUserAdsCacheUrlData( const IntSeq& userIds) { MyUtil::LongSeq uids; for (MyUtil::IntSeq::const_iterator it = userIds.begin(); it != userIds.end(); ++it) { uids.push_back(*it); } return ServiceI::instance().getObjectCache()->locateObjects(USER_ADS_CACHE_URL, uids); }
IntSeq RoomMemberList::GetAllMembersSeq(){ IntSeq ans; MemberSetIt it = _members.begin(); for(; it != _members.end(); ++it){ ans.push_back((*it)); } MCE_DEBUG("RoomMemberList::GetAllMemberSeq --> ans.size = "<<ans.size()); return ans; }
MyUtil::IntSeq RecommendData::getFriendsRecommendRandom(int limit) { IceUtil::Mutex::Lock lock(*this); checkTimeout(); IntSeq result; Int2IntMap friendRankMap; for (Int2IntSeqMap::iterator iter = _recommendMap.begin(); iter != _recommendMap.end(); ++iter) { if ( !iter->second.empty() ) { result.push_back( iter->first ); if ( _friendrank[ iter->first ] <= 0 ) { friendRankMap[ iter->first ] = 1; } else { friendRankMap[ iter->first ] = _friendrank[ iter->first ]; } } } if ( limit >= (int)friendRankMap.size() || limit < 0 ) { return result; } result.clear(); int sum = 0; vector<pair<int,int> > fr; for (map<int,int>::const_iterator iter = friendRankMap.begin(); iter != friendRankMap.end(); ++iter) { sum += iter->second; fr.push_back(*iter); } MCE_INFO("[RecommendData] getFriendsRecommendRandom ownerId(" << _ownerId << ") limit(" << limit << ") sum = " << sum); for (int i = 0; i < limit; ++i) { int r = 0; if (sum > 0) { r = rand() % sum; } else { MCE_WARN("[RecommendData] getFriendsRecommendRandom exception occur sum(" << sum << ")"); break; } for (vector<pair<int,int> >::iterator iter = fr.begin(); iter != fr.end(); ++iter) { r -= iter->second; if (r<=0) { result.push_back( iter->first ); sum -= iter->second; iter->second = 0; break; } } } return result; }
IntSeq IPTableManagerI::getUnivIdByIp(const string& ip, const Ice::Current& current) { UnivInfoSeq seq = IPSorter::instance().get(ip); IntSeq res; for(int i =0; i<seq.size(); ++i) { res.push_back(seq.at(i)->id); } return res; }
MyUtil::IntSeq UserLoginData::getActiveUser(const MyUtil::IntSeq& userList) { MCE_INFO("[UserLoginData] getActiveUser userList size = " << userList.size()); IntSeq result; for(IntSeq::const_iterator iter=userList.begin(); iter!=userList.end(); ++iter) { if( _negtiveUserList.count(*iter) <= 0 ) { //活跃用户 result.push_back(*iter); } } return result; }
ObjectResultPtr UserApiCacheManagerI::getUserApiCacheData( const IntSeq& userIds) { int cluster = 4; MyUtil::LongSeq uids; for (MyUtil::IntSeq::const_iterator it = userIds.begin(); it != userIds.end(); ++it) { if ((*it)%cluster == mod_) { uids.push_back(*it); } } return retention_->locate(uids); }
//-------------------------------------------------------------------------------- void VertifyPipe::handle(const ObjectSeq& seq) { //MCE_INFO("VertifyPipe::handle --> thread_id = " << pthread_self()); if (seq.empty()) { return; } else { //MCE_DEBUG("VertifyPipe::handle --> objectseq size = " <<seq.size()); } VerifySeq vSeq; IntSeq needNotVerifyUsers; for (size_t i = 0; i < seq.size(); ++i) { MessagePtr m = MessagePtr::dynamicCast(seq.at(i)); //MCE_INFO("m->from = " << m->from->userId << " m->to = " << m->to->userId); if( (m->type != MESSAGE && m->type != OFFLINE_MESSAGE) || (m->from->userId == 365734329 || m->to->userId == 365734329) ){//客服ID,不检查好友。 //MCE_INFO("VertifyPipe::handle --> m->from = " << m->from << " m->to = " << m->to); needNotVerifyUsers.push_back(i); continue; } VerifyPtr v = new Verify(); v->from = m->from->userId; v->to = m->to->userId; /*if(MESSAGE != m->type){ v->to = v->from; }*/ v->type = m->type; /* if (v->type == SYSTEM_MESSAGE) { v->sysMsgType = m->from->endpoint; }*/ v->index = i; vSeq.push_back(v); } MyUtil::IntSeq indexSeq; try{ indexSeq = TalkRightAdapter::instance().batchVerify(getIndex(), vSeq); }catch(Ice::Exception& e){ MCE_WARN("VertifyPipe::handle-->TalkRightAdapter::batchVerify-->" << e); } indexSeq.insert(indexSeq.end(), needNotVerifyUsers.begin(), needNotVerifyUsers.end()); //MCE_DEBUG("VertifyPipe::handle -->indexSeq size:"<<indexSeq.size()); for (size_t i = 0; i < indexSeq.size(); ++i) { MessagePtr m = MessagePtr::dynamicCast(seq.at(indexSeq.at(i))); //MCE_DEBUG("VertifyPipe::handle --> "<<m->to->index); if (m->to->index == 0 || m->to->index == 2 || m->to->index >1) { //MCE_DEBUG("VertifyPipe::handle --> endpoint:"<<m->to->endpoint); PipePool::instance().push(m->to->endpoint, 0, m); } } }
MyUtil::IntSeq StatusCacheManagerI::getStatusIdsFrom(const MyUtil::IntSeq& ids, const Ice::Current& current){ ostringstream op; IntSeq res; for( MyUtil::IntSeq::const_iterator it = ids.begin(); it != ids.end(); ++it ){ if( !_status[*it] ){ res.push_back( *it ); op << *it << "(0) "; } } MCE_INFO("StatusCacheManagerI::getStatusIdsFrom -> " << op.str() << " " << current.con->toString().substr(current.con->toString().find("remote", 25))); return res; }
Int2UserApiCacheDataMap UserApiCacheManagerI::getUserApiCacheList(const IntSeq& userIds, const Ice::Current&) { ObjectResultPtr objres = getUserApiCacheData(userIds); Int2UserApiCacheDataMap result; for (MyUtil::IntSeq::const_iterator it = userIds.begin(); it != userIds.end(); ++it) { ObjectMap::iterator hasRes = objres->data.find(*it); if (hasRes != objres->data.end()) { result[*it]=UserApiCacheEntryPtr::dynamicCast(hasRes->second)->GetUserApiCacheData(); } else { MCE_WARN("Not Exists: " << *it); } } return result; }
::Ice::Int UserFeedsI::getItemCount(const IntSeq& userIds, const ::Ice::Current& current) { ostringstream oss; oss << " userId.size: " << userIds.size(); InvokeClient tm = InvokeClient::create(current, oss.str(), InvokeClient::INVOKE_LEVEL_INFO); int count = 0; for(IntSeq::const_iterator it = userIds.begin(); it != userIds.end(); ++it) { count += fs_.item_count(*it); } return count; }
MyUtil::IntSeq OnlineStateFilterManagerI::getOnlineIdsFrom(const MyUtil::IntSeq& ids, const Ice::Current& current) { ostringstream op; IntSeq res; for( MyUtil::IntSeq::const_iterator it = ids.begin(); it != ids.end(); ++it ) { if( _online_state[*it] ) { res.push_back( *it ); op << *it << "(" << true << ") "; } } MCE_INFO("OnlineStateFilterManagerI::getOnlineStateBatch -> " << op.str() << " " << current.con->toString().substr(current.con->toString().find("remote", 25))); return res; }
MyUtil::IntSeq UserStateFilterManagerI::getGuideIdsFrom(const MyUtil::IntSeq& ids, const Ice::Current& current){ ostringstream op; IntSeq res; for( MyUtil::IntSeq::const_iterator it = ids.begin(); it != ids.end(); ++it ){ if( _user_state_guide[*it] ){ res.push_back( *it ); } else{ op << *it << " "; } } MCE_INFO("UserStateFilterManagerI::getGuideIdsFrom " << ids.size() << " ids -> res: " << res.size() << " ids. filter: " << op.str() << " " << current.con->toString().substr(current.con->toString().find("remote", 25))); return res; }
OfferDataNSeq BackendProducer::createFromIPFriend( int userId, int ipFriendLimit, const map<int,int>& weights, const IntSeq& applyList, const IntSeq& friendList, const IntSeq& blockList, const IntSeq& commBlockList, ostringstream& createLog, ostringstream& createDetail ){ struct timeval tvStart, tvIP; gettimeofday( &tvStart, NULL ); OfferDataNSeq res; IntSeq filterList( friendList ); filterList.push_back(userId); filterList.insert( filterList.end(), applyList.begin(), applyList.end() ); sort( filterList.begin(), filterList.end() ); int ipLimit = 1; xce::friendfinder::IPNoteSeq ipSeq = OfferFriendsUtil::getFreqIP(userId, ipLimit); int base_weight = 0; map<int,int>::const_iterator weiIt = weights.find(BaseTypeIPSame); if( weiIt!=weights.end() ) base_weight = weiIt->second; vector<int> ipFriends; createDetail << " ip_"; if( !ipSeq.empty() ) { ipFriends = OfferFriendsUtil::getUsersWithMaskByIP( ipSeq.at(0).ip, ipFriendLimit, filterList ); /* char chrLongValue[30]; sprintf(chrLongValue, "%lu", ipSeq.at(0).ip); */ for(vector<int>::iterator iter=ipFriends.begin(); iter!=ipFriends.end(); ++iter){ OfferDataN ipFriend; ipFriend.userId = *iter; ipFriend.weight = base_weight; //ipFriend.infos.insert(pair<int, string>(BaseTraitIPSame, string(chrLongValue))); ipFriend.sign = ((int)0) | (((int)1)<<BaseTraitIPSame); res.push_back(ipFriend); createDetail << ipFriend.userId << "_"; } createLog << " ipFriends(" << ipSeq.at(0).ip << ")(" << ipFriends.size() << ")"; } else { createLog << " ipFriends(0)(" << ipFriends.size() << ")"; } gettimeofday( &tvIP, NULL ); double linIPStart = ((double)tvStart.tv_sec*1000000 + (double)tvStart.tv_usec); double linIPEnd = ((double)tvIP.tv_sec*1000000 + (double)tvIP.tv_usec); double linIPTime = linIPEnd - linIPStart; linIPTime = linIPTime/1000000; createLog << "(" << linIPTime << "s)"; return res; }
void NoticePipe::handle(const ObjectSeq& objs){ MessageSeq msgs; IntSeq ids; for (size_t i = 0; i < objs.size(); ++i) { MessagePtr m = MessagePtr::dynamicCast(objs.at(i)); msgs.push_back(m); ids.push_back(m->to->userId); } JidSeqMap jmap; try{ //jmap = OnlineCenterAdapter::instance().getUsersJids(ids); jmap = TalkFunStateAdapter::instance().getUsersJids(ids); }catch(Ice::Exception& e){ //MCE_WARN("NoticePipe::handle --> call OnlineCenterAdapter.getUsersJids error : " << e); MCE_WARN("NoticePipe::handle --> call TalkFunStateAdapter.getUsersJids error : " << e); } MessageSeq res; for (size_t i = 0; i < msgs.size(); ++i) { JidSeqMap::iterator it = jmap.find(msgs.at(i)->to->userId); if (it == jmap.end()) { continue; } for (size_t j = 0; j < it->second.size(); ++j) { if (it->second.at(j)->endpoint.size() > 1 && it->second.at(j)->endpoint[0] == 'T') { MessagePtr m = new Message(); m->from = new Jid(); m->from->userId = -1; m->from->endpoint = "appnotice.talk.xiaonei.com"; m->from->index = -1; m->to = it->second.at(j); m->type = msgs.at(i)->type; m->msg = msgs.at(i)->msg; res.push_back(m); } } } if (!res.empty()) { MCE_INFO("NoticePipe::handle --> Notice size:"<<res.size()); try{ TalkDeliverAdapter::instance().deliver(res); }catch(Ice::Exception& e){ MCE_WARN("NoticePipe::handle --> call TalkDeliverAdapter.deliver error : " << e); } } }
MyUtil::IntSeq JourneyLogicI::getList(::Ice::Long key, ::Ice::Int limit, const Ice::Current& current) { using namespace xce::tripod; ostringstream inMsg; inMsg << "JourneyLogicI::getList key " << key << " limit :" << limit; InvokeClient ic = InvokeClient::create(current, inMsg.str(), InvokeClient::INVOKE_LEVEL_INFO); IntSeq result; StringListType resultStr; JourneyLogicListTripodAdapter::instance().GetSortedSet(lexical_cast<string>(key), &resultStr, 0, limit); for (StringListType::const_iterator iter = resultStr.begin(); iter != resultStr.end(); iter++) { MCE_DEBUG("JourneyLogicI::getList(::Ice::Long key) key " << key << " *iter " << *iter); result.push_back(lexical_cast<int>(*iter)); } return result; }
FeedMetaSeq UserFeedsI::get(const IntSeq& userids, ::Ice::Int begin, ::Ice::Int limit, const ::Ice::Current& current) { ostringstream oss; oss << " userids.size: " << userids.size() << " begin: " << begin << " limit: " << limit; InvokeClient tm = InvokeClient::create(current, oss.str(), InvokeClient::INVOKE_LEVEL_INFO); try { return getSegment(fs_.gets(userids, begin + limit), userids, begin, limit); } catch (std::exception& e) { MCE_WARN("UserFeedsI::get Exception! " << e.what()); } catch (...) { MCE_WARN("UserFeedsI::get Exception, userids.size: " << userids.size()); } return FeedMetaSeq(); }
FeedMetaSeq UserFeedsI::get(const IntSeq& userids, ::Ice::Int begin, ::Ice::Int limit, const ::Ice::Current& current) { ostringstream oss; oss << "UserFeedsI::get, userids.size: " << userids.size() << " begin: " << begin << " limit: " << limit; TimeCost tm = TimeCost::create(oss.str(), TimeCost::LOG_LEVEL_INFO); return getSegment(fs_.gets(userids, begin + limit), userids, begin, limit); }
FeedMetaSeq UserFeedsI::getLessThanFeedidByTypesWithFilter(const IntSeq& userids, ::Ice::Long feedid, ::Ice::Int limit, const IntSeq& types, const StrSeq& filter, const ::Ice::Current& current) { ostringstream oss; oss << "UserFeedsI::getLessThanFeedidByTypesWithFilter, userids.size: " << userids.size() << " limit: " << limit << " feedid: " << feedid; TimeCost tm = TimeCost::create(oss.str(), TimeCost::LOG_LEVEL_INFO); return getSegment(fs_.gets_less_feedid_with_filter(userids, TypesFilter(types), IdsFilter(filter), feedid, limit), userids, 0, limit); }
FeedMetaSeq UserFeedsI::getByTypes(const IntSeq& userids, ::Ice::Int begin, ::Ice::Int limit, const IntSeq& types, const ::Ice::Current& current) { ostringstream oss; oss << " userids.size: " << userids.size() << " begin: " << begin << " limit: " << limit; InvokeClient tm = InvokeClient::create(current, oss.str(), InvokeClient::INVOKE_LEVEL_INFO); try { if(types.empty()) return getSegment(fs_.gets(userids, begin + limit), userids, begin, limit); return getSegment(fs_.gets_with_filter(userids, TypesFilter(types), IdsFilter(std::vector<string>()), begin + limit), userids, begin, limit); } catch (std::exception& e) { MCE_WARN("UserFeedsI::getByTypes Exception! " << e.what()); } catch (...) { MCE_WARN("UserFeedsI::getByTypes Exception!"); } return FeedMetaSeq(); }
ObjectResultPtr UserAdsCacheManagerI::getUserAdsCacheData( const IntSeq& userIds) { MyUtil::LongSeq uids; for (MyUtil::IntSeq::const_iterator it = userIds.begin(); it != userIds.end(); ++it) { uids.push_back(*it); } ObjectResultPtr result = new ObjectResult; ObjectResultPtr obj = ServiceI::instance().getObjectCache()->locateObjects(USER_ADS_CACHE_URL, uids); for(MyUtil::ObjectMap::const_iterator it = obj->data.begin(); it != obj->data.end(); ++it) { result->data.insert(make_pair((*it).first, toOld(UserAdsCacheUrlDataPtr::dynamicCast((*it).second)))); } // return ServiceI::instance().getObjectCache()->locateObjects(USER_ADS_CACHE_URL, uids); return result; }
IntSeq IPRecordManagerI::getUsersWithMask(::Ice::Long ip,::Ice::Int limit,const MyUtil::IntSeq& mask, const Ice::Current& current){ IPRecordDataPtr obj = locateIPRecordData(ip); IntSeq res = obj->getWithMask(limit,mask); MCE_INFO( "[IPRecordManagerI::getUsersWithMask] ip=" << ip << " size=" << obj->size() << " limit=" << limit << " mask.size=" << mask.size() << " res.size()=" << res.size() << " " << current.con->toString().substr(current.con->toString().find("remote", 25))); return res; }
FeedDataSeq UserFeedSet::getFeedDataSeqByType(const IntSeq& types, int begin, int limit) { IceUtil::Mutex::Lock lock(_mutex); time_t t = time(NULL); _lastAccessTime = t; // if (t - _lastSortTime > 300) { // _lastSortTime = t; // TaskManager::instance().execute(new SortTask(this)); // } WeightIndex& index = _mergeGroupSet.get<1> (); FeedDataSeq seq; vector<WeightIndex::iterator> itSeq; if (index.size() < (unsigned int) (begin + limit) + 10) { // MCE_DEBUG("UserFeedSet::getFeedContentSeq --> _loadStat:"<<_loadStat<<" index.size(): "<<index.size()<<" begin: "<<begin<<" limit: "<<limit); if (_loadStat == 0) { load(); FeedItemManagerI::instance().addkickUser(_user); } } set<int> typeSet; for (size_t i = 0; i < types.size(); ++i) { typeSet.insert(types.at(i)); } WeightIndex::iterator iter = index.begin(); for (int k = 0; iter != index.end() && k < begin; ++iter) { int type = (*iter)->type(); if (typeSet.find(type) != typeSet.end()) { ++k; } } for (int h = 0; iter != index.end() && h < limit; ++iter) { int type = (*iter)->type(); if (typeSet.find(type) != typeSet.end()) { itSeq.push_back(iter); ++h; } } _buildFeedContents(index, itSeq, seq); MCE_DEBUG("UserFeedSet::getFeedContentSeq --> content.size:"<<seq.size()); return seq; }
Int2UserAdsCacheDataMap UserAdsCacheManagerI::getUserAdsCacheList(const IntSeq& userIds, const Ice::Current& current) { ostringstream msg; msg << "UserAdsCacheManagerI::getUserAdsCacheList -> size: " << userIds.size() << " " << current.con->toString().substr(current.con->toString().find("remote",25)); TimeCost tc = TimeCost::create(msg.str()); ObjectResultPtr objres = getUserAdsCacheData(userIds); Int2UserAdsCacheDataMap result; for (MyUtil::IntSeq::const_iterator it = userIds.begin(); it != userIds.end(); ++it) { ObjectMap::iterator hasRes = objres->data.find(*it); if (hasRes != objres->data.end()) { result[*it]=toOld(UserAdsCacheUrlDataPtr::dynamicCast(hasRes->second)); } else { MCE_WARN("Not Exists: " << *it); } } return result; }
IntSeq MemberList::getMemberList(const RoomIdPtr& rid, Affiliation affiliation) { //IceUtil::Mutex::Lock lock(_mutex); map<RoomIdPtr, map<Affiliation, set<int> > >::iterator rit = _members.find(rid); if (rit == _members.end()) { return IntSeq(); } map<Affiliation, set<int> >::iterator it = rit->second.find(affiliation); if (it == rit->second.end()) { return IntSeq(); } IntSeq seq; for (set<int>::iterator sit = it->second.begin(); sit != it->second.end(); ++sit) { seq.push_back(*sit); } return seq; }
map<int, map<int,UnivData> > UnivLinkFriends::linkFriends(map<int, map<int,UnivData> >& uds){ map<int, map<int,UnivData> > res; int bTotal = 0; int aTotal = 0; for (map<int, map<int,UnivData> >::iterator itMap1 = uds.begin(); itMap1 != uds.end(); ++itMap1) { IntSeq ids; for ( map<int,UnivData>::iterator itMap2 = itMap1->second.begin(); itMap2 != itMap1->second.end(); ++itMap2) { ids.push_back( itMap2->first ); } bTotal += itMap1->second.size(); map<int,string> friends; MyUtil::Int2IntSeqMap buddies = xce::buddy::adapter::BuddyByAddTimeCacheAdapter::instance().getFriendLists(ids); for( MyUtil::Int2IntSeqMap::iterator it1=buddies.begin(); it1!=buddies.end(); ++it1 ){ if( it1->second.size() <= 0 ){ continue; } string& guestStr = friends[it1->first]; for( MyUtil::IntSeq::iterator it2=it1->second.begin(); it2!=it1->second.end(); ++it2 ){ guestStr = guestStr + "" + boost::lexical_cast<string>(*it2) + ","; } } aTotal += friends.size(); cout << "[UnivLinkFriends::linkFriends] linking mod " << itMap1->first << " size/fSize: " << itMap1->second.size() << "/" << friends.size() << endl; for ( map<int,string>::iterator itMap3 = friends.begin(); itMap3 != friends.end(); ++itMap3) { map<int,UnivData>::iterator itMap4 = itMap1->second.find( itMap3->first ); UnivData ud = itMap4->second; ud.has_friends = true; ud.friend_list = itMap3->second; res[itMap1->first].insert( make_pair(itMap4->first,ud) ); } } cout << "[UnivLinkFriends::linkFriends] size/linkedSize: " << bTotal << "/" << aTotal << endl; return res; }
::MyUtil::IntSeq mop::hi::svc::model::UseredTribeSetI::getAll(::Ice::Int begin, ::Ice::Int limit, const Ice::Current& current) { if (begin < 0) { begin = 0; } IceUtil::Mutex::Lock lock(*this); IntSeq result; for(IntSeq::iterator it = tribeIds.begin(); it != tribeIds.end(); ++it) { if(begin-- > 0) continue; result.push_back(*it); if(limit > 0 && result.size() >= limit) break; } return result; }
IntSeq RoomPool::GetRoomMember(const MucRoomIdPtr& roomid){ RoomMemberListPtr rmlptr; IntSeq ans; rmlptr = GetMemberList(roomid); if(rmlptr){ IceUtil::RWRecMutex::RLock lock(_rwmutex); ans = rmlptr->GetAllMembersSeq(); } MCE_DEBUG("RoomPool::GetRoomMember --> roomname = " << roomid->roomname << " ANS.SIZE = " << ans.size()); return ans; }