package hudson.plugins.jabber.im.transport; import hudson.plugins.im.IMMessage; import hudson.plugins.im.IMMessageListener; import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smackx.muc.MultiUserChat; import org.jivesoftware.smackx.packet.DelayInformation; /** * Wraps an {@link IMMessageListener} in a Smack {@link PacketListener}. * * @author kutzi */ class JabberMUCMessageListenerAdapter implements PacketListener { private final IMMessageListener listener; private final JabberIMConnection connection; private final MultiUserChat muc; public JabberMUCMessageListenerAdapter(IMMessageListener listener, JabberIMConnection connection, MultiUserChat muc) { this.listener = listener; this.connection = connection; this.muc = muc; } @Override public void processPacket(Packet p) { if (p instanceof Message) { // don't react to old messages for (PacketExtension pe : p.getExtensions()) { if (pe instanceof DelayInformation) { return; // simply bail out here, it's an old message } } final Message msg = (Message) p; // Messages from users in the same MUC are automatically authorized. // Getting the JID for a other user in a chatroom doesn't seem to that easy ... IMMessage imMessage = new IMMessage(msg.getFrom(), msg.getTo(), msg.getBody(), true); listener.onMessage(imMessage); } } }