aboutsummaryrefslogtreecommitdiff
path: root/src/org/jivesoftware/smackx/muc/PacketMultiplexListener.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/jivesoftware/smackx/muc/PacketMultiplexListener.java')
-rw-r--r--src/org/jivesoftware/smackx/muc/PacketMultiplexListener.java96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/org/jivesoftware/smackx/muc/PacketMultiplexListener.java b/src/org/jivesoftware/smackx/muc/PacketMultiplexListener.java
new file mode 100644
index 0000000..c1863c2
--- /dev/null
+++ b/src/org/jivesoftware/smackx/muc/PacketMultiplexListener.java
@@ -0,0 +1,96 @@
+/**
+ * $RCSfile$
+ * $Revision: 2779 $
+ * $Date: 2005-09-05 17:00:45 -0300 (Mon, 05 Sep 2005) $
+ *
+ * Copyright 2003-2006 Jive Software.
+ *
+ * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jivesoftware.smackx.muc;
+
+import org.jivesoftware.smack.PacketListener;
+import org.jivesoftware.smack.filter.MessageTypeFilter;
+import org.jivesoftware.smack.filter.PacketExtensionFilter;
+import org.jivesoftware.smack.filter.PacketFilter;
+import org.jivesoftware.smack.filter.PacketTypeFilter;
+import org.jivesoftware.smack.packet.Message;
+import org.jivesoftware.smack.packet.Packet;
+import org.jivesoftware.smack.packet.Presence;
+
+/**
+ * The single <code>PacketListener</code> used by each {@link MultiUserChat}
+ * for all basic processing of presence, and message packets targeted to that chat.
+ *
+ * @author Larry Kirschner
+ */
+class PacketMultiplexListener implements PacketListener {
+
+ private static final PacketFilter MESSAGE_FILTER =
+ new MessageTypeFilter(Message.Type.groupchat);
+ private static final PacketFilter PRESENCE_FILTER = new PacketTypeFilter(Presence.class);
+ private static final PacketFilter SUBJECT_FILTER = new PacketFilter() {
+ public boolean accept(Packet packet) {
+ Message msg = (Message) packet;
+ return msg.getSubject() != null;
+ }
+ };
+ private static final PacketFilter DECLINES_FILTER =
+ new PacketExtensionFilter("x",
+ "http://jabber.org/protocol/muc#user");
+
+ private ConnectionDetachedPacketCollector messageCollector;
+ private PacketListener presenceListener;
+ private PacketListener subjectListener;
+ private PacketListener declinesListener;
+
+ public PacketMultiplexListener(
+ ConnectionDetachedPacketCollector messageCollector,
+ PacketListener presenceListener,
+ PacketListener subjectListener, PacketListener declinesListener) {
+ if (messageCollector == null) {
+ throw new IllegalArgumentException("MessageCollector is null");
+ }
+ if (presenceListener == null) {
+ throw new IllegalArgumentException("Presence listener is null");
+ }
+ if (subjectListener == null) {
+ throw new IllegalArgumentException("Subject listener is null");
+ }
+ if (declinesListener == null) {
+ throw new IllegalArgumentException("Declines listener is null");
+ }
+ this.messageCollector = messageCollector;
+ this.presenceListener = presenceListener;
+ this.subjectListener = subjectListener;
+ this.declinesListener = declinesListener;
+ }
+
+ public void processPacket(Packet p) {
+ if (PRESENCE_FILTER.accept(p)) {
+ presenceListener.processPacket(p);
+ }
+ else if (MESSAGE_FILTER.accept(p)) {
+ messageCollector.processPacket(p);
+
+ if (SUBJECT_FILTER.accept(p)) {
+ subjectListener.processPacket(p);
+ }
+ }
+ else if (DECLINES_FILTER.accept(p)) {
+ declinesListener.processPacket(p);
+ }
+ }
+
+}