void MessageHandlerI::deliverFeed(const string& msg, const string& type, const MyUtil::IntSeq& ids, const Ice::Current&) { StatFunc statF("MessageHandlerI::deliverFeed"); //MCE_DEBUG("call MessageHandlerI::deliverFeed"); ostringstream os; os<< "<message type='headline' from='"<<type<<"@news.talk.xiaonei.com'>" << msg << "</message>"; xml_document doc; if (!doc.load(os.str().c_str())) { MCE_WARN("Parser xml err !!!"); return; } //TargetHandlerSeq res; JidSeqMap jmap; try{ jmap = OnlineCenterAdapter::instance().getUsersJids(ids); }catch(Ice::Exception& e){ MCE_WARN("MessageHandlerI::deliverFeed-->OnlineCenterAdapter::getUsersJids-->" << e); } MessageSeq seq; for (JidSeqMap::iterator it = jmap.begin(); it != jmap.end(); ++it) { for (size_t i = 0; i < it->second.size(); ++i) { if (it->second.at(i)->index <= 1) { // this user is old im client or web client, ignore this feed continue; } MessagePtr mPtr = new Message(); mPtr->from = new Jid(); mPtr->from->userId = -1; mPtr->from->endpoint = type; mPtr->from->index = -1; mPtr->to = it->second.at(i); mPtr->type = SYSTEM_MESSAGE; doc.child("message").append_attribute("to") = jidToString(it->second.at(i),false).c_str(); mPtr->msg = doc.xml(); seq.push_back(mPtr); if (it->second.at(i)->userId == 128487631) { MCE_DEBUG("NEWS:"<<mPtr->msg); } } } if (!seq.empty()) { //NotifyTaskManager::instance().addTargetHandler(res); MCE_DEBUG("send news to Dispatch list"); try{ TalkDeliverAdapter::instance().deliver(seq); }catch(Ice::Exception& e){ MCE_WARN("MessageHandlerI::deliverFeed-->TalkDeliverAdapter::deliver-->" << e); } } //NotifyTaskManager::instance().addNotify(new Notify< std::pair<string,MyUtil::IntSeq>,FeedNotifyHandler>(std::make_pair(msg,ids))); }
void DeliverFeedTask::handle() { const string FuncName = "DeliverFeedTask::handle"; TimeStatN ts; MCE_INFO("PowerTransferI::deliverFeedWithFocusFriend-> feed actor:" << feed_->actor); if(!XmlParas()) return; JidSeqMap jmap; try { jmap = TalkFunStateAdapter::instance().getUsersJids(target_,22); } catch (Ice::Exception& e) { MCE_WARN(FuncName << "-->TalkFunStateAdapter::getUsersJids-->" << target_.size() << " " << e); return; } catch (...) { MCE_WARN(FuncName << "-->TalkFunStateAdapter::getUsersJids--> err: " << target_.size()); return; } DeliverFeedInit(); for(JidSeqMap::const_iterator it = jmap.begin(); it != jmap.end(); ++it) { for(size_t j = 0; j < it->second.size(); ++j) { if (it->second.at(j)->endpoint.empty()) continue; if(it->second.at(j)->endpoint[0] == 'T') { client_jids_.push_back(jidToString(it->second.at(j))); if(client_jids_.size() > 500) Send2Proto(client_jids_, msg2client_); } else if(it->second.at(j)->endpoint[0] == 'W') { if(focus_friends_.find(it->first) != focus_friends_.end()) { webpager_focus_jids_.push_back(jidToString(it->second.at(j))); if(webpager_focus_jids_.size() > 500) Send2Proto(webpager_focus_jids_, msg2webpager_focus_); } else { webpager_unfocus_jids_.push_back(jidToString(it->second.at(j))); if(webpager_unfocus_jids_.size() > 500) Send2Proto(webpager_unfocus_jids_, msg2webpager_unfocus_); } } else if(string::npos != it->second.at(j)->endpoint.find("PTalkProxy")) { if(PowerTransferI::instance().IsDeliver2PTalkproxy(feed_->type & 0xFFFF)) { phone_jids_.push_back(jidToString(it->second.at(j))); if(phone_jids_.size() > 500) Send2Proto(phone_jids_, msg2phone_); } } } } Send2Proto(client_jids_, msg2client_); Send2Proto(phone_jids_, msg2phone_); Send2Proto(webpager_focus_jids_, msg2webpager_focus_); Send2Proto(webpager_unfocus_jids_, msg2webpager_unfocus_); FunStatManager::instance().Stat(FuncName, ts.getTime(), (ts.getTime() > 500.0)); }
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); } } }
MucActiveUserSeq RoomPool::GetRoomActiveUserSeq(const MucRoomIdPtr& roomid){ MCE_DEBUG("RoomPool::GetRoomActiveUserSeq --> ROOMNAME = " << roomid->roomname); RoomMemberListPtr rmlptr; MucActiveUserSeq ans; MyUtil::IntSeq userids; rmlptr = GetMemberList(roomid); if(rmlptr){ IceUtil::RWRecMutex::RLock lock(_rwmutex); userids = rmlptr->GetAllMembersSeq(); } if(userids.empty()){ MCE_DEBUG("RoomPool::GetRoomActiveUserSeq --> userids is empty so return"); return ans; } JidSeqMap jseqmap; try{ MCE_DEBUG("RoomPool::GetRoomActiveUserSeq --> call OnlineCenterAdapter.getUsersJids userids.size = " << userids.size()); jseqmap = OnlineCenterAdapter::instance().getUsersJids(userids); } catch(Ice::Exception& e){ MCE_WARN("RoomPool::GetRoomActiveUserSeq-->OnlineCenter::getUserJids-->line:"<<__LINE__<<" err:"<<e); } catch(std::exception& e){ MCE_WARN("RoomPool::GetRoomActiveUserSeq--> call OnlineCenter.getUserJids ERR line:"<<__LINE__<<" err:"<<e.what()); } if(jseqmap.empty()){ return ans; } TalkUserMap uinfoPtr; try{ uinfoPtr = TalkCacheClient::instance().GetUserBySeqWithLoad(0, userids); }catch(Ice::Exception& e){ MCE_WARN("RoomPool::GetRoomActiveUserSeq-->TalkCacheClient::GetUserBySeqWithLoad-->error:" << e); } MyUtil::IntSeq::iterator uidit = userids.begin(); for(; uidit != userids.end(); ++uidit){ int userid = (*uidit); JidSeqMap::const_iterator jit = jseqmap.find(userid); if(jit == jseqmap.end()){ continue; } Permisions permision = PMember; try{ MCE_DEBUG("RoomPool::GetRoomActiveUserSeq --> CALL MucUserRoomAdapter.GetMemberPermision(" << userid << ", " << roomid->roomname << ")"); MucMemberPtr m = MucUserRoomAdapter::instance().GetMemberPermision(userid, roomid); if(m){ permision = m->permision; } else{ MCE_DEBUG("RoomPool::GetRoomActiveUserSeq --> CALL MucUserRoomAdapter.GetMemberPermision's return is NULL, it means the user is not in the room so continue!"); continue; } } catch(Ice::Exception& e){ MCE_WARN("RoomPool::GetRoomActiveUserSeq-->MucUserRoom::GetMemberPermision-->line:"<<__LINE__<<" err:"<<e); } catch(std::exception& e){ MCE_WARN("RoomPool::GetRoomActiveUserSeq--> call MucUserRoom.GetMemberPermision ERR line:"<<__LINE__<<" err:"<<e.what()); } string nickname = ""; TalkUserMap::iterator infoit = uinfoPtr.find(userid); if(infoit == uinfoPtr.end()){ //取不到用户的名称,默认用id try{ nickname = boost::lexical_cast<string>(userid); } catch (exception& e){ MCE_WARN("RoomPool::GetRoomActiveUserSeq-->boost::lexical_cast to string exception val = " << userid); } } else{ TalkUserPtr u = infoit->second; nickname = u->name; } for (size_t index = 0; index < jit->second.size(); ++index) { char endpoint = jit->second.at(index)->endpoint[0]; if(endpoint != 'T' && endpoint != 'W'){ continue; } MucRoomIdPtr roomid = new MucRoomId(); roomid->roomname = rmlptr->_roomname; roomid->domain = MUCDOMAIN; MucUserIdentityPtr identity = new MucUserIdentity(); identity->roomid = roomid; identity->nickname = makeMucNickname(jit->second.at(index), nickname); identity->userid = userid; MucActiveUserPtr activeuserptr = new MucActiveUser(); activeuserptr->jid = jit->second.at(index); activeuserptr->identity = identity; activeuserptr->permision = permision; ans.push_back(activeuserptr); } } MCE_DEBUG("RoomPool::GetRoomActiveUserSeq --> roomname = " << roomid->roomname << " ans.size = " << ans.size()); return ans; }
void deliverNotifyWebpagerTask::handle(){ TimeStatN ts; MessageSeq msgs; bool is_feed_actor = false; Ice::Long nid = 0; if(_content.find("ugc_content") != string::npos){ is_feed_actor = true; } size_t npos = _content.find("\"nid\":\""); if(npos != string::npos){ size_t ipos = _content.find_first_of("\"", npos + 7); if(ipos != string::npos){ string snid = _content.substr(npos+7, ipos - (npos+7)); try{ nid = boost::lexical_cast<Ice::Long>(snid); }catch(...){ MCE_WARN("PowerTransfer::deliverNotifyWebpager--> boost cast nid error nid = " << nid); } } } JidSeqMap jmap; try{ jmap = TalkFunStateAdapter::instance().getUsersJids(_toids,2); } catch(Ice::Exception& e) { MCE_WARN("PowerTransfer::deliverNotifyWebpager-->TalkFunStateAdapter::getUserJids-->" << e); PowerTransferI::instance().UpCount(200000,0); return ; } for(JidSeqMap::iterator jit = jmap.begin();jit != jmap.end();++jit) { JidSeq& jseq = (jit->second); for(int j=0; j<(int)jseq.size(); j++){ if(jseq.at(j)->endpoint[0] == 'W'){ MessagePtr msg = new Message(); JidPtr jfrom = new Jid(); jfrom->userId = 0; jfrom->endpoint = "feed.talk.xiaonei.com"; jfrom->index = -1; ostringstream os; os << "<message type='common' from='" << jidToString(jfrom) << "' to='" << jidToString(jseq.at(j)) << "'>" << "</message>"; xml_document doc; if(!doc.load(os.str().c_str())){ continue; } xml_node body = doc.child("message").append_child(); body.set_name("body"); body.append_child(node_pcdata).set_value(_content.c_str()); msg->from = jfrom; msg->to = jseq.at(j); msg->type = NOTIFY2_MESSAGE; msg->msg = doc.xml(); msgs.push_back(msg); } } } if(msgs.empty()){ PowerTransferI::instance().UpCount(200000,0); return; } ostringstream os; for(IntSeq::iterator idit = _toids.begin(); idit != _toids.end(); ++idit){ os << (*idit) << " "; } try{ MCE_INFO("PowerTransfer::deliverNotifyWebpager--> is_feed_actor = " << is_feed_actor << " nid : " << nid << " toids.size :" << _toids.size() << " toids : " << os.str()); TalkDeliverAdapter::instance().deliver(msgs); }catch(Ice::Exception& e){ MCE_WARN("PowerTransfer::deliverNotifyWebpager-->TalkDeliverAdapter::deliver--> " << e); PowerTransferI::instance().UpCount(200000,0); return ; } FunStatManager::instance().Stat("PowerTransfer::deliverNotifyWebpager", ts.getTime(), false); PowerTransferI::instance().UpCount(200000,1,msgs.size()); }
void deliverNotifyPhoneTask::handle(){ TimeStatN ts; xml_document doc; if(!doc.load(_content.c_str())){ MCE_WARN("PowerTransfer::deliverNotifyPhone --> xml err, " <<_content); PowerTransferI::instance().UpCount(300000,0); return; } Ice::Long nid = 0; size_t npos = _content.find("\"nid\":\""); if(npos != string::npos){ size_t ipos = _content.find_first_of("\"", npos + 7); if(ipos != string::npos){ string snid = _content.substr(npos+7, ipos - (npos+7)); try{ nid = boost::lexical_cast<Ice::Long>(snid); }catch(...){ MCE_WARN("PowerTransfer::deliverNotifyClient--> boost cast nid error nid = " << nid); } } } MessageSeq msgs; JidSeqMap jmap; try{ jmap = TalkFunStateAdapter::instance().getUsersJids(_toids,16); }catch(Ice::Exception& e){ MCE_WARN("PowerTransfer::deliverNotifyPhone-->TalkFunStateAdapter::getUserJids--> " << e); PowerTransferI::instance().UpCount(300000,0); return ; } for(JidSeqMap::iterator jit = jmap.begin();jit != jmap.end();++jit) { JidSeq& jseq = (jit->second); for(int j=0; j<(int)jseq.size(); j++){ if(jseq.at(j)->endpoint[0] == 'P'){ MessagePtr msg = new Message(); JidPtr jfrom = new Jid(); jfrom->userId = 0; jfrom->endpoint = "feed.talk.xiaonei.com"; jfrom->index = -1; doc.child("message").append_attribute("to") = jidToString(jseq.at(j)).c_str(); msg->from = jfrom; msg->to = jseq.at(j); msg->type = PHONE_NOTIFY; msg->msg = doc.xml(); msgs.push_back(msg); } } } if(msgs.empty()){ PowerTransferI::instance().UpCount(300000,0); return; } try{ TalkDeliverAdapter::instance().deliver(msgs); }catch(Ice::Exception& e){ MCE_WARN("PowerTransfer::deliverNotifyPhone-->TalkDeliverAdapter::deliver-->" << e); PowerTransferI::instance().UpCount(300000,0); } FunStatManager::instance().Stat("PowerTransfer::deliverNotifyPhone", ts.getTime(), false); PowerTransferI::instance().UpCount(300000,1,msgs.size()); }
void FeedReplyPipe::handle(){ FeedReplyToMessagConverter converter; TimeStat ts; float totalwait = 0.0; FeedReplyWithTargetSeq objs; WTransitManagerI::instance().SwapFeedReplySeq(objs); if(objs.empty()){ return; } //for(size_t x = 0; x < objs.size(); ++x){ //FeedReplyWithTargetPtr reply = FeedReplyWithTargetPtr::dynamicCast(objs.at(x)); //FeedReplyWithTargetPtr reply = objs.at(x); //totalwait += reply->latets.getTime(); //} MessageSeq msgs; for (size_t x = 0; x < objs.size(); ++x) { //FeedReplyWithTargetPtr reply = FeedReplyWithTargetPtr::dynamicCast(objs.at(x)); FeedReplyWithTargetPtr reply = objs.at(x); converter.setData(reply->replyData); if(reply->replyData->actor == 257876975 || reply->replyData->actor == 238489851){ //MCE_DEBUG(reply->replyData->actor << " " << reply->replyData->xml); } // MyUtil::IntSeq target = reply->getTarget(); MCE_DEBUG(" FeedReplyPipe::handle --> feed->target.size = "<< reply->target.size()); JidSeqMap jmap; try { //jmap = OnlineCenterAdapter::instance().getUsersJids(reply->target); jmap = TalkFunStateAdapter::instance().getUsersJids(reply->target, 22); } catch (Ice::Exception& e) { MCE_WARN("FeedReplyPipe::handle-->TalkFunStateAdapter::getUsersJids-->" << reply->replyData->actor << " " << reply->target.size() << " "<<e); } catch (std::exception& e) { MCE_WARN("FeedReplyPipe::handle --> online center err: " << reply->target.size() << " "<<e.what()); } if (jmap.empty()) { MCE_DEBUG("FeedReplyPipe::handle --> no friend online "); continue; } MCE_DEBUG("FeedReplyPipe::handle --> jmap.size = "<<jmap.size()); for (size_t i = 0; i < reply->target.size(); ++i) { JidSeqMap::const_iterator it = jmap.find(reply->target.at(i)); if (it == jmap.end()) { MCE_DEBUG("FeedReplyPipe::handle --> can not find jmap feed->target(i)="<<reply->target.at(i)); continue; } for (size_t j = 0; j < it->second.size(); ++j) { MessagePtr msg; if ( (!it->second.at(j)->endpoint.empty()) ){ if( it->second.at(j)->endpoint[0] == 'T' ){ //MCE_DEBUG("FeedReplyPipe::handle-->SEND REPLY source=" << reply->replyData->source << " actor=" << reply->replyData->actor << " replyid=" << reply->replyData->replyId << " to userid=" << it->second.at(j)->userId); msg = converter.getToTalkMessage(it->second.at(j)); } if(msg){ msgs.push_back(msg); } } } } } if (!msgs.empty()) { try{ TalkDeliverAdapter::instance().deliver(msgs); }catch(Ice::Exception& e){ MCE_WARN("FeedReplyPipe::handle --> TalkDeliverAdapter::deliver--> error : " << e); } } MONITOR("SignForTimeuse::WTransit::FeedReplyPipe::handle-->" << ts.getTime() << "|" << "count" << objs.size()); }