package com.sissi.pipeline.in.presence.init; import com.sissi.context.JID; import com.sissi.context.JIDContext; import com.sissi.context.JIDs; import com.sissi.pipeline.in.ProxyProcessor; import com.sissi.protocol.Protocol; import com.sissi.protocol.presence.Presence; import com.sissi.protocol.presence.PresenceType; import com.sissi.ucenter.vcard.VCardContext; /** * 当前JID已订阅者(From)所有资源出席通知 * * @author kim 2014年1月21日 */ public class PresenceInit4FansProcessor extends ProxyProcessor { private final VCardContext vCardContext; public PresenceInit4FansProcessor(VCardContext vCardContext) { super(); this.vCardContext = vCardContext; } @Override public boolean input(JIDContext context, Protocol protocol) { return this.init4Fans(protocol.cast(Presence.class).clone(), context); } /** * 所有已订阅者所有资源 * * @param presence * @param context * @return */ private boolean init4Fans(Presence presence, JIDContext context) { for (JID jid : super.iSubscribedWho(context.jid())) { JIDs resoures = super.resources(jid); if (resoures.isEmpty()) { this.writeOffline(context, jid); } else { this.writeOnlinePresence(context, jid, resoures); } } return true; } /** * 离线状态(含签名) * * @param context * @param from */ private void writeOffline(JIDContext context, JID from) { context.write(new Presence().setFrom(from).status(this.vCardContext.pull(from, VCardContext.FIELD_SIGNATURE).getValue()).type(PresenceType.UNAVAILABLE), true); } /** * 在线状态 * * @param context * @param from * @param resoures */ private void writeOnlinePresence(JIDContext context, JID from, JIDs resoures) { for (JID resource : resoures) { context.write(new Presence().setFrom(resource).clauses(super.findOne(resource, true).status().clauses()), true); } } }