#include "PresenceOracle.h" #include #include "Swiften/Client/StanzaChannel.h" namespace Swift { typedef std::pair > > JIDMapPair; typedef std::pair > JIDPresencePair; PresenceOracle::PresenceOracle(StanzaChannel* stanzaChannel) { stanzaChannel->onPresenceReceived.connect(boost::bind(&PresenceOracle::handleIncomingPresence, this, _1)); } void PresenceOracle::handleIncomingPresence(boost::shared_ptr presence) { JID bareJID = JID(presence->getFrom().toBare()); std::map > jidMap = entries_[bareJID]; boost::shared_ptr last; foreach(JIDPresencePair pair, jidMap) { if (pair.first == presence->getFrom()) { last = pair.second; break; } } jidMap[presence->getFrom()] = presence; entries_[bareJID] = jidMap; onPresenceChange(presence, last); } }