package saros.communication.extensions; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import org.jivesoftware.smack.filter.AndFilter; import org.jivesoftware.smack.filter.PacketFilter; import org.jivesoftware.smack.packet.Packet; /** * @JTourBusStop 2, Creating custom network messages, Session Packet Extensions: * * <p>As you see we also have another base class to inherit from if you want to use messages that * should only be processed during a running Saros session. */ public abstract class SarosSessionPacketExtension extends SarosPacketExtension { @XStreamAlias("sid") @XStreamAsAttribute protected final String sessionID; protected SarosSessionPacketExtension(String sessionID) { this.sessionID = sessionID; } public String getSessionID() { return sessionID; } public abstract static class Provider<T extends SarosSessionPacketExtension> extends SarosPacketExtension.Provider<T> { public Provider(String elementName, Class<?>... classes) { super(elementName, classes); } public PacketFilter getPacketFilter(final String sessionID) { return new AndFilter( super.getPacketFilter(), new PacketFilter() { @Override public boolean accept(Packet packet) { SarosSessionPacketExtension extension = getPayload(packet); if (extension == null) return false; return sessionID.equals(extension.getSessionID()); } }); } } }