package com.sissi.ucenter.relation.roster.impl; import java.util.UUID; import com.sissi.broadcast.BroadcastProtocol; import com.sissi.context.JID; import com.sissi.protocol.ProtocolType; import com.sissi.protocol.iq.IQ; import com.sissi.protocol.iq.roster.Group; import com.sissi.protocol.iq.roster.GroupItem; import com.sissi.protocol.iq.roster.Roster; import com.sissi.protocol.iq.roster.RosterSubscription; import com.sissi.ucenter.relation.roster.RelationCascade; import com.sissi.ucenter.relation.roster.RosterRelation; /** * 级联广播 * * @author kim 2014年1月22日 */ public class BroadcastRelationCascade implements RelationCascade { private final BroadcastProtocol broadcastProtocol; private final MongoOurRelation ourRelation; private final Group remove; /** * @param broadcastProtocol * @param ourRelation * @param remove 默认Group(默认) */ public BroadcastRelationCascade(BroadcastProtocol broadcastProtocol, MongoOurRelation ourRelation, Group remove) { super(); this.broadcastProtocol = broadcastProtocol; this.ourRelation = ourRelation; this.remove = remove; } @Override public RelationCascade update(JID master, JID slave) { RosterRelation relation = this.ourRelation.ourRelation(master, slave).cast(RosterRelation.class); // 激活则广播 if (relation.activate()) { this.broadcastProtocol.broadcast(master, new IQ().setId(UUID.randomUUID().toString()).add(new Roster(new GroupItem(relation))).setType(ProtocolType.SET)); } return this; } public RelationCascade remove(JID master, JID slave) { this.broadcastProtocol.broadcast(master, new IQ().setId(UUID.randomUUID().toString()).add(new Roster(new GroupItem(slave).addOnEmpty(this.remove).setSubscription(RosterSubscription.REMOVE))).setType(ProtocolType.SET)); return this; } }