Package com.sissi.pipeline.in.presence.roster

Source Code of com.sissi.pipeline.in.presence.roster.PresenceRosterSubscribe2ReplySelfsProcessor

package com.sissi.pipeline.in.presence.roster;

import java.util.UUID;

import com.sissi.context.JID;
import com.sissi.context.JIDContext;
import com.sissi.pipeline.in.ProxyProcessor;
import com.sissi.protocol.Protocol;
import com.sissi.protocol.ProtocolType;
import com.sissi.protocol.iq.IQ;
import com.sissi.protocol.iq.roster.GroupItem;
import com.sissi.protocol.iq.roster.Roster;
import com.sissi.protocol.iq.roster.RosterSubscription;
import com.sissi.protocol.presence.Presence;
import com.sissi.protocol.presence.PresenceType;
import com.sissi.ucenter.relation.roster.RosterRelation;

/**
* 自动批准,自身已订阅.</p>1,名册推送 2,Presence type = subscribed 3,To所有资源对当前JID上线
*
* @author kim 2014年1月24日
*/
public class PresenceRosterSubscribe2ReplySelfsProcessor extends ProxyProcessor {

  private final String[] relations = new String[] { RosterSubscription.TO.toString(), RosterSubscription.BOTH.toString() };

  @Override
  public boolean input(JIDContext context, Protocol protocol) {
    JID to = super.build(protocol.getTo());
    return super.ourRelation(context.jid(), to).cast(RosterRelation.class).in(this.relations) ? this.writeAndReturn(context, to, protocol.cast(Presence.class)) : true;
  }

  private boolean writeAndReturn(JIDContext context, JID to, Presence presence) {
    this.writeRoster(context, to).writeSubscribed(context, to, presence).writeAvailable(context, to, presence);
    return false;
  }

  private PresenceRosterSubscribe2ReplySelfsProcessor writeRoster(JIDContext context, JID to) {
    super.broadcast(context.jid(), new IQ().setId(UUID.randomUUID().toString()).add(new Roster(new GroupItem(super.ourRelation(context.jid(), to).cast(RosterRelation.class)))).setType(ProtocolType.SET));
    return this;
  }

  private PresenceRosterSubscribe2ReplySelfsProcessor writeSubscribed(JIDContext context, JID to, Presence presence) {
    super.broadcast(context.jid(), presence.type(PresenceType.SUBSCRIBED).setFrom(to.asStringWithBare()));
    return this;
  }

  private PresenceRosterSubscribe2ReplySelfsProcessor writeAvailable(JIDContext context, JID to, Presence presence) {
    for (JID resource : super.resources(to)) {
      super.broadcast(context.jid(), presence.type(PresenceType.AVAILABLE).setFrom(resource).clauses(super.findOne(resource, true).status().clauses()));
    }
    return this;
  }
}
TOP

Related Classes of com.sissi.pipeline.in.presence.roster.PresenceRosterSubscribe2ReplySelfsProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.