曹妃甸核酸检测平台.apk(点击下载) / MultiUserChat.java


package asmack.org.jivesoftware.smackx.muc;

import asmack.org.jivesoftware.smack.Chat;
import asmack.org.jivesoftware.smack.Connection;
import asmack.org.jivesoftware.smack.ConnectionCreationListener;
import asmack.org.jivesoftware.smack.ConnectionListener;
import asmack.org.jivesoftware.smack.MessageListener;
import asmack.org.jivesoftware.smack.PacketCollector;
import asmack.org.jivesoftware.smack.PacketInterceptor;
import asmack.org.jivesoftware.smack.PacketListener;
import asmack.org.jivesoftware.smack.SmackConfiguration;
import asmack.org.jivesoftware.smack.XMPPException;
import asmack.org.jivesoftware.smack.filter.AndFilter;
import asmack.org.jivesoftware.smack.filter.FromMatchesFilter;
import asmack.org.jivesoftware.smack.filter.MessageTypeFilter;
import asmack.org.jivesoftware.smack.filter.PacketExtensionFilter;
import asmack.org.jivesoftware.smack.filter.PacketFilter;
import asmack.org.jivesoftware.smack.filter.PacketIDFilter;
import asmack.org.jivesoftware.smack.filter.PacketTypeFilter;
import asmack.org.jivesoftware.smack.packet.IQ;
import asmack.org.jivesoftware.smack.packet.Message;
import asmack.org.jivesoftware.smack.packet.Packet;
import asmack.org.jivesoftware.smack.packet.Presence;
import asmack.org.jivesoftware.smack.packet.Registration;
import asmack.org.jivesoftware.smack.util.StringUtils;
import asmack.org.jivesoftware.smackx.Form;
import asmack.org.jivesoftware.smackx.GroupChatInvitation;
import asmack.org.jivesoftware.smackx.NodeInformationProvider;
import asmack.org.jivesoftware.smackx.ServiceDiscoveryManager;
import asmack.org.jivesoftware.smackx.packet.DiscoverInfo;
import asmack.org.jivesoftware.smackx.packet.DiscoverItems;
import asmack.org.jivesoftware.smackx.packet.MUCAdmin;
import asmack.org.jivesoftware.smackx.packet.MUCInitialPresence;
import asmack.org.jivesoftware.smackx.packet.MUCOwner;
import asmack.org.jivesoftware.smackx.packet.MUCUser;
import java.lang.ref.WeakReference;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;

public class MultiUserChat {
    private static final String discoNamespace = "http://jabber.org/protocol/muc";
    private static final String discoNode = "http://jabber.org/protocol/muc#rooms";
    private static Map<Connection, List<String>> joinedRooms = new WeakHashMap();
    private Connection connection;
    private List<PacketListener> connectionListeners = new ArrayList();
    private final List<InvitationRejectionListener> invitationRejectionListeners = new ArrayList();
    private boolean joined = false;
    private ConnectionDetachedPacketCollector messageCollector;
    private PacketFilter messageFilter;
    private String nickname = null;
    private Map<String, Presence> occupantsMap = new ConcurrentHashMap();
    private final List<ParticipantStatusListener> participantStatusListeners = new ArrayList();
    private PacketFilter presenceFilter;
    private List<PacketInterceptor> presenceInterceptors = new ArrayList();
    private String room;
    private RoomListenerMultiplexor roomListenerMultiplexor;
    private String subject;
    private final List<SubjectUpdatedListener> subjectUpdatedListeners = new ArrayList();
    private final List<UserStatusListener> userStatusListeners = new ArrayList();

    private static class InvitationsMonitor implements ConnectionListener {
        private static final Map<Connection, WeakReference<InvitationsMonitor>> monitors = new WeakHashMap();
        private Connection connection;
        private PacketFilter invitationFilter;
        private PacketListener invitationPacketListener;
        private final List<InvitationListener> invitationsListeners = new ArrayList();

        private InvitationsMonitor(Connection connection2) {
            this.connection = connection2;
        }

        private void cancel() {
            this.connection.removePacketListener(this.invitationPacketListener);
            this.connection.removeConnectionListener(this);
        }

        /* access modifiers changed from: private */
        /* access modifiers changed from: public */
        private void fireInvitationListeners(String str, String str2, String str3, String str4, Message message) {
            InvitationListener[] invitationListenerArr;
            synchronized (this.invitationsListeners) {
                invitationListenerArr = new InvitationListener[this.invitationsListeners.size()];
                this.invitationsListeners.toArray(invitationListenerArr);
            }
            for (InvitationListener invitationListener : invitationListenerArr) {
                invitationListener.invitationReceived(this.connection, str, str2, str3, str4, message);
            }
        }

        public static InvitationsMonitor getInvitationsMonitor(Connection connection2) {
            InvitationsMonitor invitationsMonitor;
            synchronized (monitors) {
                if (!monitors.containsKey(connection2)) {
                    monitors.put(connection2, new WeakReference<>(new InvitationsMonitor(connection2)));
                }
                invitationsMonitor = monitors.get(connection2).get();
            }
            return invitationsMonitor;
        }

        private void init() {
            this.invitationFilter = new PacketExtensionFilter(GroupChatInvitation.ELEMENT_NAME, "http://jabber.org/protocol/muc#user");
            this.invitationPacketListener = new PacketListener() {
                /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.InvitationsMonitor.AnonymousClass1 */

                @Override // asmack.org.jivesoftware.smack.PacketListener
                public void processPacket(Packet packet) {
                    MUCUser mUCUser = (MUCUser) packet.getExtension(GroupChatInvitation.ELEMENT_NAME, "http://jabber.org/protocol/muc#user");
                    if (mUCUser.getInvite() != null) {
                        Message message = (Message) packet;
                        if (message.getType() != Message.Type.error) {
                            InvitationsMonitor.this.fireInvitationListeners(packet.getFrom(), mUCUser.getInvite().getFrom(), mUCUser.getInvite().getReason(), mUCUser.getPassword(), message);
                        }
                    }
                }
            };
            this.connection.addPacketListener(this.invitationPacketListener, this.invitationFilter);
            this.connection.addConnectionListener(this);
        }

        public void addInvitationListener(InvitationListener invitationListener) {
            synchronized (this.invitationsListeners) {
                if (this.invitationsListeners.size() == 0) {
                    init();
                }
                if (!this.invitationsListeners.contains(invitationListener)) {
                    this.invitationsListeners.add(invitationListener);
                }
            }
        }

        @Override // asmack.org.jivesoftware.smack.ConnectionListener
        public void connectionClosed() {
            cancel();
        }

        @Override // asmack.org.jivesoftware.smack.ConnectionListener
        public void connectionClosedOnError(Exception exc) {
        }

        @Override // asmack.org.jivesoftware.smack.ConnectionListener
        public void reconnectingIn(int i) {
        }

        @Override // asmack.org.jivesoftware.smack.ConnectionListener
        public void reconnectionFailed(Exception exc) {
        }

        @Override // asmack.org.jivesoftware.smack.ConnectionListener
        public void reconnectionSuccessful() {
        }

        public void removeInvitationListener(InvitationListener invitationListener) {
            synchronized (this.invitationsListeners) {
                if (this.invitationsListeners.contains(invitationListener)) {
                    this.invitationsListeners.remove(invitationListener);
                }
                if (this.invitationsListeners.size() == 0) {
                    cancel();
                }
            }
        }
    }

    static {
        Connection.addConnectionCreationListener(new ConnectionCreationListener() {
            /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass1 */

            @Override // asmack.org.jivesoftware.smack.ConnectionCreationListener
            public void connectionCreated(final Connection connection) {
                ServiceDiscoveryManager.getInstanceFor(connection).addFeature(MultiUserChat.discoNamespace);
                ServiceDiscoveryManager.getInstanceFor(connection).setNodeInformationProvider(MultiUserChat.discoNode, new NodeInformationProvider() {
                    /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass1.AnonymousClass1 */

                    @Override // asmack.org.jivesoftware.smackx.NodeInformationProvider
                    public List<String> getNodeFeatures() {
                        return null;
                    }

                    @Override // asmack.org.jivesoftware.smackx.NodeInformationProvider
                    public List<DiscoverInfo.Identity> getNodeIdentities() {
                        return null;
                    }

                    @Override // asmack.org.jivesoftware.smackx.NodeInformationProvider
                    public List<DiscoverItems.Item> getNodeItems() {
                        ArrayList arrayList = new ArrayList();
                        Iterator joinedRooms = MultiUserChat.getJoinedRooms(connection);
                        while (joinedRooms.hasNext()) {
                            arrayList.add(new DiscoverItems.Item((String) joinedRooms.next()));
                        }
                        return arrayList;
                    }
                });
            }
        });
    }

    public MultiUserChat(Connection connection2, String str) {
        this.connection = connection2;
        this.room = str.toLowerCase();
        init(false);
    }

    public MultiUserChat(Connection connection2, String str, boolean z) {
        this.connection = connection2;
        this.room = str.toLowerCase();
        init(z);
    }

    public static void addInvitationListener(Connection connection2, InvitationListener invitationListener) {
        InvitationsMonitor.getInvitationsMonitor(connection2).addInvitationListener(invitationListener);
    }

    private void changeAffiliationByAdmin(String str, String str2, String str3) throws XMPPException {
        MUCAdmin mUCAdmin = new MUCAdmin();
        mUCAdmin.setTo(this.room);
        mUCAdmin.setType(IQ.Type.SET);
        MUCAdmin.Item item = new MUCAdmin.Item(str2, null);
        item.setJid(str);
        item.setReason(str3);
        mUCAdmin.addItem(item);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCAdmin.getPacketID()));
        this.connection.sendPacket(mUCAdmin);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getError() != null) {
            throw new XMPPException(iq.getError());
        }
    }

    private void changeAffiliationByAdmin(Collection<String> collection, String str) throws XMPPException {
        MUCAdmin mUCAdmin = new MUCAdmin();
        mUCAdmin.setTo(this.room);
        mUCAdmin.setType(IQ.Type.SET);
        for (String str2 : collection) {
            MUCAdmin.Item item = new MUCAdmin.Item(str, null);
            item.setJid(str2);
            mUCAdmin.addItem(item);
        }
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCAdmin.getPacketID()));
        this.connection.sendPacket(mUCAdmin);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getError() != null) {
            throw new XMPPException(iq.getError());
        }
    }

    private void changeAffiliationByOwner(String str, String str2) throws XMPPException {
        MUCOwner mUCOwner = new MUCOwner();
        mUCOwner.setTo(this.room);
        mUCOwner.setType(IQ.Type.SET);
        MUCOwner.Item item = new MUCOwner.Item(str2);
        item.setJid(str);
        mUCOwner.addItem(item);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCOwner.getPacketID()));
        this.connection.sendPacket(mUCOwner);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getError() != null) {
            throw new XMPPException(iq.getError());
        }
    }

    private void changeAffiliationByOwner(Collection<String> collection, String str) throws XMPPException {
        MUCOwner mUCOwner = new MUCOwner();
        mUCOwner.setTo(this.room);
        mUCOwner.setType(IQ.Type.SET);
        for (String str2 : collection) {
            MUCOwner.Item item = new MUCOwner.Item(str);
            item.setJid(str2);
            mUCOwner.addItem(item);
        }
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCOwner.getPacketID()));
        this.connection.sendPacket(mUCOwner);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getError() != null) {
            throw new XMPPException(iq.getError());
        }
    }

    private void changeRole(String str, String str2, String str3) throws XMPPException {
        MUCAdmin mUCAdmin = new MUCAdmin();
        mUCAdmin.setTo(this.room);
        mUCAdmin.setType(IQ.Type.SET);
        MUCAdmin.Item item = new MUCAdmin.Item(null, str2);
        item.setNick(str);
        item.setReason(str3);
        mUCAdmin.addItem(item);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCAdmin.getPacketID()));
        this.connection.sendPacket(mUCAdmin);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getError() != null) {
            throw new XMPPException(iq.getError());
        }
    }

    private void changeRole(Collection<String> collection, String str) throws XMPPException {
        MUCAdmin mUCAdmin = new MUCAdmin();
        mUCAdmin.setTo(this.room);
        mUCAdmin.setType(IQ.Type.SET);
        for (String str2 : collection) {
            MUCAdmin.Item item = new MUCAdmin.Item(null, str);
            item.setNick(str2);
            mUCAdmin.addItem(item);
        }
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCAdmin.getPacketID()));
        this.connection.sendPacket(mUCAdmin);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getError() != null) {
            throw new XMPPException(iq.getError());
        }
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    /* JADX WARNING: Removed duplicated region for block: B:25:0x005d  */
    /* JADX WARNING: Removed duplicated region for block: B:34:0x007f  */
    /* JADX WARNING: Removed duplicated region for block: B:41:0x0096  */
    /* JADX WARNING: Removed duplicated region for block: B:48:? A[ADDED_TO_REGION, RETURN, SYNTHETIC] */
    private void checkAffiliationModifications(String str, String str2, boolean z, String str3) {
        String str4;
        ArrayList arrayList;
        String str5;
        ArrayList arrayList2;
        if ("owner".equals(str) && !"owner".equals(str2)) {
            str5 = "ownershipRevoked";
            if (!z) {
                arrayList2 = new ArrayList();
                arrayList2.add(str3);
                fireParticipantStatusListeners(str5, arrayList2);
                if ("owner".equals(str)) {
                }
                if ("admin".equals(str)) {
                }
                if (!"member".equals(str)) {
                }
            }
        } else if (!"admin".equals(str) || "admin".equals(str2)) {
            if ("member".equals(str) && !"member".equals(str2)) {
                str5 = "membershipRevoked";
                if (!z) {
                    arrayList2 = new ArrayList();
                    arrayList2.add(str3);
                    fireParticipantStatusListeners(str5, arrayList2);
                }
            }
            if ("owner".equals(str) && "owner".equals(str2)) {
                str4 = "ownershipGranted";
                if (!z) {
                    arrayList = new ArrayList();
                    arrayList.add(str3);
                    fireParticipantStatusListeners(str4, arrayList);
                    return;
                }
            } else if ("admin".equals(str) && "admin".equals(str2)) {
                str4 = "adminGranted";
                if (!z) {
                    arrayList = new ArrayList();
                    arrayList.add(str3);
                    fireParticipantStatusListeners(str4, arrayList);
                    return;
                }
            } else if (!"member".equals(str) && "member".equals(str2)) {
                str4 = "membershipGranted";
                if (!z) {
                    arrayList = new ArrayList();
                    arrayList.add(str3);
                    fireParticipantStatusListeners(str4, arrayList);
                    return;
                }
            } else {
                return;
            }
            fireUserStatusListeners(str4, new Object[0]);
            return;
        } else {
            str5 = "adminRevoked";
            if (!z) {
                arrayList2 = new ArrayList();
                arrayList2.add(str3);
                fireParticipantStatusListeners(str5, arrayList2);
                if ("owner".equals(str)) {
                }
                if ("admin".equals(str)) {
                }
                if (!"member".equals(str)) {
                    return;
                }
                return;
            }
        }
        fireUserStatusListeners(str5, new Object[0]);
        if ("owner".equals(str)) {
        }
        if ("admin".equals(str)) {
        }
        if (!"member".equals(str)) {
        }
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private void checkPresenceCode(String str, boolean z, MUCUser mUCUser, String str2) {
        String str3;
        ArrayList arrayList;
        Object[] objArr;
        if ("307".equals(str)) {
            str3 = "kicked";
            if (z) {
                this.joined = false;
                objArr = new Object[]{mUCUser.getItem().getActor(), mUCUser.getItem().getReason()};
            } else {
                arrayList = new ArrayList();
                arrayList.add(str2);
                arrayList.add(mUCUser.getItem().getActor());
                arrayList.add(mUCUser.getItem().getReason());
                fireParticipantStatusListeners(str3, arrayList);
                return;
            }
        } else if ("301".equals(str)) {
            str3 = "banned";
            if (z) {
                this.joined = false;
                objArr = new Object[]{mUCUser.getItem().getActor(), mUCUser.getItem().getReason()};
            } else {
                arrayList = new ArrayList();
                arrayList.add(str2);
                arrayList.add(mUCUser.getItem().getActor());
                arrayList.add(mUCUser.getItem().getReason());
                fireParticipantStatusListeners(str3, arrayList);
                return;
            }
        } else if ("321".equals(str)) {
            if (z) {
                this.joined = false;
                fireUserStatusListeners("membershipRevoked", new Object[0]);
                this.occupantsMap.clear();
                this.nickname = null;
                userHasLeft();
            }
            return;
        } else if ("303".equals(str)) {
            ArrayList arrayList2 = new ArrayList();
            arrayList2.add(str2);
            arrayList2.add(mUCUser.getItem().getNick());
            fireParticipantStatusListeners("nicknameChanged", arrayList2);
            return;
        } else {
            return;
        }
        fireUserStatusListeners(str3, objArr);
        this.occupantsMap.clear();
        this.nickname = null;
        userHasLeft();
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private void checkRoleModifications(String str, String str2, boolean z, String str3) {
        String str4;
        ArrayList arrayList;
        if (("visitor".equals(str) || "none".equals(str)) && "participant".equals(str2)) {
            if (z) {
                fireUserStatusListeners("voiceGranted", new Object[0]);
            } else {
                ArrayList arrayList2 = new ArrayList();
                arrayList2.add(str3);
                fireParticipantStatusListeners("voiceGranted", arrayList2);
            }
        } else if ("participant".equals(str) && ("visitor".equals(str2) || "none".equals(str2))) {
            if (z) {
                fireUserStatusListeners("voiceRevoked", new Object[0]);
            } else {
                ArrayList arrayList3 = new ArrayList();
                arrayList3.add(str3);
                fireParticipantStatusListeners("voiceRevoked", arrayList3);
            }
        }
        if (!"moderator".equals(str) && "moderator".equals(str2)) {
            if ("visitor".equals(str) || "none".equals(str)) {
                if (z) {
                    fireUserStatusListeners("voiceGranted", new Object[0]);
                } else {
                    ArrayList arrayList4 = new ArrayList();
                    arrayList4.add(str3);
                    fireParticipantStatusListeners("voiceGranted", arrayList4);
                }
            }
            str4 = "moderatorGranted";
            if (!z) {
                arrayList = new ArrayList();
                arrayList.add(str3);
                fireParticipantStatusListeners(str4, arrayList);
                return;
            }
        } else if ("moderator".equals(str) && !"moderator".equals(str2)) {
            if ("visitor".equals(str2) || "none".equals(str2)) {
                if (z) {
                    fireUserStatusListeners("voiceRevoked", new Object[0]);
                } else {
                    ArrayList arrayList5 = new ArrayList();
                    arrayList5.add(str3);
                    fireParticipantStatusListeners("voiceRevoked", arrayList5);
                }
            }
            str4 = "moderatorRevoked";
            if (!z) {
                arrayList = new ArrayList();
                arrayList.add(str3);
                fireParticipantStatusListeners(str4, arrayList);
                return;
            }
        } else {
            return;
        }
        fireUserStatusListeners(str4, new Object[0]);
    }

    public static void decline(Connection connection2, String str, String str2, String str3) {
        Packet message = new Message(str);
        MUCUser mUCUser = new MUCUser();
        MUCUser.Decline decline = new MUCUser.Decline();
        decline.setTo(str2);
        decline.setReason(str3);
        mUCUser.setDecline(decline);
        message.addExtension(mUCUser);
        connection2.sendPacket(message);
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private void fireInvitationRejectionListeners(String str, String str2) {
        InvitationRejectionListener[] invitationRejectionListenerArr;
        synchronized (this.invitationRejectionListeners) {
            invitationRejectionListenerArr = new InvitationRejectionListener[this.invitationRejectionListeners.size()];
            this.invitationRejectionListeners.toArray(invitationRejectionListenerArr);
        }
        for (InvitationRejectionListener invitationRejectionListener : invitationRejectionListenerArr) {
            invitationRejectionListener.invitationDeclined(str, str2);
        }
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private void fireParticipantStatusListeners(String str, List<String> list) {
        ParticipantStatusListener[] participantStatusListenerArr;
        synchronized (this.participantStatusListeners) {
            participantStatusListenerArr = new ParticipantStatusListener[this.participantStatusListeners.size()];
            this.participantStatusListeners.toArray(participantStatusListenerArr);
        }
        try {
            Class[] clsArr = new Class[list.size()];
            for (int i = 0; i < list.size(); i++) {
                clsArr[i] = String.class;
            }
            Method declaredMethod = ParticipantStatusListener.class.getDeclaredMethod(str, clsArr);
            for (ParticipantStatusListener participantStatusListener : participantStatusListenerArr) {
                declaredMethod.invoke(participantStatusListener, list.toArray());
            }
        } catch (NoSuchMethodException e2) {
            e2.printStackTrace();
        } catch (InvocationTargetException e3) {
            e3.printStackTrace();
        } catch (IllegalAccessException e4) {
            e4.printStackTrace();
        }
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private void fireSubjectUpdatedListeners(String str, String str2) {
        SubjectUpdatedListener[] subjectUpdatedListenerArr;
        synchronized (this.subjectUpdatedListeners) {
            subjectUpdatedListenerArr = new SubjectUpdatedListener[this.subjectUpdatedListeners.size()];
            this.subjectUpdatedListeners.toArray(subjectUpdatedListenerArr);
        }
        for (SubjectUpdatedListener subjectUpdatedListener : subjectUpdatedListenerArr) {
            subjectUpdatedListener.subjectUpdated(str, str2);
        }
    }

    private void fireUserStatusListeners(String str, Object[] objArr) {
        UserStatusListener[] userStatusListenerArr;
        synchronized (this.userStatusListeners) {
            userStatusListenerArr = new UserStatusListener[this.userStatusListeners.size()];
            this.userStatusListeners.toArray(userStatusListenerArr);
        }
        Class[] clsArr = new Class[objArr.length];
        for (int i = 0; i < objArr.length; i++) {
            clsArr[i] = objArr[i].getClass();
        }
        try {
            Method declaredMethod = UserStatusListener.class.getDeclaredMethod(str, clsArr);
            for (UserStatusListener userStatusListener : userStatusListenerArr) {
                declaredMethod.invoke(userStatusListener, objArr);
            }
        } catch (NoSuchMethodException e2) {
            e2.printStackTrace();
        } catch (InvocationTargetException e3) {
            e3.printStackTrace();
        } catch (IllegalAccessException e4) {
            e4.printStackTrace();
        }
    }

    private Collection<Affiliate> getAffiliatesByAdmin(String str) throws XMPPException {
        MUCAdmin mUCAdmin = new MUCAdmin();
        mUCAdmin.setTo(this.room);
        mUCAdmin.setType(IQ.Type.GET);
        mUCAdmin.addItem(new MUCAdmin.Item(str, null));
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCAdmin.getPacketID()));
        this.connection.sendPacket(mUCAdmin);
        MUCAdmin mUCAdmin2 = (MUCAdmin) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (mUCAdmin2 == null) {
            throw new XMPPException("No response from server.");
        } else if (mUCAdmin2.getError() == null) {
            ArrayList arrayList = new ArrayList();
            Iterator items = mUCAdmin2.getItems();
            while (items.hasNext()) {
                arrayList.add(new Affiliate((MUCAdmin.Item) items.next()));
            }
            return arrayList;
        } else {
            throw new XMPPException(mUCAdmin2.getError());
        }
    }

    private Collection<Affiliate> getAffiliatesByOwner(String str) throws XMPPException {
        MUCOwner mUCOwner = new MUCOwner();
        mUCOwner.setTo(this.room);
        mUCOwner.setType(IQ.Type.GET);
        mUCOwner.addItem(new MUCOwner.Item(str));
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCOwner.getPacketID()));
        this.connection.sendPacket(mUCOwner);
        MUCOwner mUCOwner2 = (MUCOwner) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (mUCOwner2 == null) {
            throw new XMPPException("No response from server.");
        } else if (mUCOwner2.getError() == null) {
            ArrayList arrayList = new ArrayList();
            Iterator items = mUCOwner2.getItems();
            while (items.hasNext()) {
                arrayList.add(new Affiliate((MUCOwner.Item) items.next()));
            }
            return arrayList;
        } else {
            throw new XMPPException(mUCOwner2.getError());
        }
    }

    public static Collection<HostedRoom> getHostedRooms(Connection connection2, String str) throws XMPPException {
        ArrayList arrayList = new ArrayList();
        Iterator<DiscoverItems.Item> items = ServiceDiscoveryManager.getInstanceFor(connection2).discoverItems(str).getItems();
        while (items.hasNext()) {
            arrayList.add(new HostedRoom(items.next()));
        }
        return arrayList;
    }

    /* access modifiers changed from: private */
    public static Iterator<String> getJoinedRooms(Connection connection2) {
        List<String> list = joinedRooms.get(connection2);
        return list != null ? list.iterator() : new ArrayList().iterator();
    }

    public static Iterator<String> getJoinedRooms(Connection connection2, String str) {
        try {
            ArrayList arrayList = new ArrayList();
            Iterator<DiscoverItems.Item> items = ServiceDiscoveryManager.getInstanceFor(connection2).discoverItems(str, discoNode).getItems();
            while (items.hasNext()) {
                arrayList.add(items.next().getEntityID());
            }
            return arrayList.iterator();
        } catch (XMPPException e2) {
            e2.printStackTrace();
            return new ArrayList().iterator();
        }
    }

    /* access modifiers changed from: private */
    /* access modifiers changed from: public */
    private MUCUser getMUCUserExtension(Packet packet) {
        if (packet != null) {
            return (MUCUser) packet.getExtension(GroupChatInvitation.ELEMENT_NAME, "http://jabber.org/protocol/muc#user");
        }
        return null;
    }

    private Collection<Occupant> getOccupants(String str) throws XMPPException {
        MUCAdmin mUCAdmin = new MUCAdmin();
        mUCAdmin.setTo(this.room);
        mUCAdmin.setType(IQ.Type.GET);
        mUCAdmin.addItem(new MUCAdmin.Item(null, str));
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCAdmin.getPacketID()));
        this.connection.sendPacket(mUCAdmin);
        MUCAdmin mUCAdmin2 = (MUCAdmin) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (mUCAdmin2 == null) {
            throw new XMPPException("No response from server.");
        } else if (mUCAdmin2.getError() == null) {
            ArrayList arrayList = new ArrayList();
            Iterator items = mUCAdmin2.getItems();
            while (items.hasNext()) {
                arrayList.add(new Occupant((MUCAdmin.Item) items.next()));
            }
            return arrayList;
        } else {
            throw new XMPPException(mUCAdmin2.getError());
        }
    }

    public static RoomInfo getRoomInfo(Connection connection2, String str) throws XMPPException {
        return new RoomInfo(ServiceDiscoveryManager.getInstanceFor(connection2).discoverInfo(str));
    }

    public static Collection<String> getServiceNames(Connection connection2) throws XMPPException {
        ArrayList arrayList = new ArrayList();
        ServiceDiscoveryManager instanceFor = ServiceDiscoveryManager.getInstanceFor(connection2);
        Iterator<DiscoverItems.Item> items = instanceFor.discoverItems(connection2.getServiceName()).getItems();
        while (items.hasNext()) {
            DiscoverItems.Item next = items.next();
            try {
                if (instanceFor.discoverInfo(next.getEntityID()).containsFeature(discoNamespace)) {
                    arrayList.add(next.getEntityID());
                }
            } catch (XMPPException unused) {
            }
        }
        return arrayList;
    }

    private void init(boolean z) {
        if (z) {
            AnonymousClass4 r8 = new PacketFilter() {
                /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass4 */

                @Override // asmack.org.jivesoftware.smack.filter.PacketFilter
                public boolean accept(Packet packet) {
                    if (packet.getFrom() == null) {
                        return false;
                    }
                    return MultiUserChat.this.room.equals(StringUtils.parseBareAddress(packet.getFrom()).toLowerCase());
                }
            };
            this.messageFilter = new AndFilter(r8, new MessageTypeFilter(Message.Type.groupchat));
            this.messageFilter = new AndFilter(this.messageFilter, new PacketFilter() {
                /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass5 */

                @Override // asmack.org.jivesoftware.smack.filter.PacketFilter
                public boolean accept(Packet packet) {
                    return ((Message) packet).getBody() != null;
                }
            });
            this.presenceFilter = new AndFilter(r8, new PacketTypeFilter(Presence.class));
            this.messageCollector = new ConnectionDetachedPacketCollector();
            return;
        }
        this.messageFilter = new AndFilter(new FromMatchesFilter(this.room), new MessageTypeFilter(Message.Type.groupchat));
        this.messageFilter = new AndFilter(this.messageFilter, new PacketFilter() {
            /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass6 */

            @Override // asmack.org.jivesoftware.smack.filter.PacketFilter
            public boolean accept(Packet packet) {
                return ((Message) packet).getBody() != null;
            }
        });
        this.presenceFilter = new AndFilter(new FromMatchesFilter(this.room), new PacketTypeFilter(Presence.class));
        this.messageCollector = new ConnectionDetachedPacketCollector();
        initMultiplexor();
    }

    public static boolean isServiceEnabled(Connection connection2, String str) {
        try {
            return ServiceDiscoveryManager.getInstanceFor(connection2).discoverInfo(str).containsFeature(discoNamespace);
        } catch (XMPPException e2) {
            e2.printStackTrace();
            return false;
        }
    }

    public static void removeInvitationListener(Connection connection2, InvitationListener invitationListener) {
        InvitationsMonitor.getInvitationsMonitor(connection2).removeInvitationListener(invitationListener);
    }

    private synchronized void userHasJoined() {
        List<String> list = joinedRooms.get(this.connection);
        if (list == null) {
            list = new ArrayList<>();
            joinedRooms.put(this.connection, list);
        }
        list.clear();
        list.add(this.room);
    }

    private synchronized void userHasLeft() {
        List<String> list = joinedRooms.get(this.connection);
        if (list != null) {
            list.remove(this.room);
        }
    }

    public void addInvitationRejectionListener(InvitationRejectionListener invitationRejectionListener) {
        synchronized (this.invitationRejectionListeners) {
            if (!this.invitationRejectionListeners.contains(invitationRejectionListener)) {
                this.invitationRejectionListeners.add(invitationRejectionListener);
            }
        }
    }

    public void addMessageListener(PacketListener packetListener) {
        this.connection.addPacketListener(packetListener, this.messageFilter);
        this.connectionListeners.add(packetListener);
    }

    public void addParticipantListener(PacketListener packetListener) {
        this.connection.addPacketListener(packetListener, this.presenceFilter);
        this.connectionListeners.add(packetListener);
    }

    public void addParticipantStatusListener(ParticipantStatusListener participantStatusListener) {
        synchronized (this.participantStatusListeners) {
            if (!this.participantStatusListeners.contains(participantStatusListener)) {
                this.participantStatusListeners.add(participantStatusListener);
            }
        }
    }

    public void addPresenceInterceptor(PacketInterceptor packetInterceptor) {
        this.presenceInterceptors.add(packetInterceptor);
    }

    public void addSubjectUpdatedListener(SubjectUpdatedListener subjectUpdatedListener) {
        synchronized (this.subjectUpdatedListeners) {
            if (!this.subjectUpdatedListeners.contains(subjectUpdatedListener)) {
                this.subjectUpdatedListeners.add(subjectUpdatedListener);
            }
        }
    }

    public void addUserStatusListener(UserStatusListener userStatusListener) {
        synchronized (this.userStatusListeners) {
            if (!this.userStatusListeners.contains(userStatusListener)) {
                this.userStatusListeners.add(userStatusListener);
            }
        }
    }

    public void banUser(String str, String str2) throws XMPPException {
        changeAffiliationByAdmin(str, "outcast", str2);
    }

    public void banUsers(Collection<String> collection) throws XMPPException {
        changeAffiliationByAdmin(collection, "outcast");
    }

    public void changeAvailabilityStatus(String str, Presence.Mode mode) {
        String str2 = this.nickname;
        if (str2 == null || str2.equals("")) {
            throw new IllegalArgumentException("Nickname must not be null or blank.");
        } else if (this.joined) {
            Presence presence = new Presence(Presence.Type.available);
            presence.setStatus(str);
            presence.setMode(mode);
            presence.setTo(String.valueOf(this.room) + "/" + this.nickname);
            for (PacketInterceptor packetInterceptor : this.presenceInterceptors) {
                packetInterceptor.interceptPacket(presence);
            }
            this.connection.sendPacket(presence);
        } else {
            throw new IllegalStateException("Must be logged into the room to change the availability status.");
        }
    }

    public void changeNickname(String str) throws XMPPException {
        if (str == null || str.equals("")) {
            throw new IllegalArgumentException("Nickname must not be null or blank.");
        } else if (this.joined) {
            Presence presence = new Presence(Presence.Type.available);
            presence.setTo(String.valueOf(this.room) + "/" + str);
            for (PacketInterceptor packetInterceptor : this.presenceInterceptors) {
                packetInterceptor.interceptPacket(presence);
            }
            PacketCollector createPacketCollector = this.connection.createPacketCollector(new AndFilter(new FromMatchesFilter(String.valueOf(this.room) + "/" + str), new PacketTypeFilter(Presence.class)));
            this.connection.sendPacket(presence);
            Presence presence2 = (Presence) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
            createPacketCollector.cancel();
            if (presence2 == null) {
                throw new XMPPException("No response from server.");
            } else if (presence2.getError() == null) {
                this.nickname = str;
            } else {
                throw new XMPPException(presence2.getError());
            }
        } else {
            throw new IllegalStateException("Must be logged into the room to change nickname.");
        }
    }

    public void changeSubject(final String str) throws XMPPException {
        Message message = new Message(this.room, Message.Type.groupchat);
        message.setSubject(str);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new AndFilter(new AndFilter(new FromMatchesFilter(this.room), new PacketTypeFilter(Message.class)), new PacketFilter() {
            /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass3 */

            @Override // asmack.org.jivesoftware.smack.filter.PacketFilter
            public boolean accept(Packet packet) {
                return str.equals(((Message) packet).getSubject());
            }
        }));
        this.connection.sendPacket(message);
        Message message2 = (Message) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (message2 == null) {
            throw new XMPPException("No response from server.");
        } else if (message2.getError() != null) {
            throw new XMPPException(message2.getError());
        }
    }

    public synchronized void create(String str) throws XMPPException {
        if (str != null) {
            if (!str.equals("")) {
                if (!this.joined) {
                    Presence presence = new Presence(Presence.Type.available);
                    presence.setTo(String.valueOf(this.room) + "/" + str);
                    presence.addExtension(new MUCInitialPresence());
                    for (PacketInterceptor packetInterceptor : this.presenceInterceptors) {
                        packetInterceptor.interceptPacket(presence);
                    }
                    PacketCollector createPacketCollector = this.connection.createPacketCollector(new AndFilter(new FromMatchesFilter(String.valueOf(this.room) + "/" + str), new PacketTypeFilter(Presence.class)));
                    this.connection.sendPacket(presence);
                    Presence presence2 = (Presence) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
                    createPacketCollector.cancel();
                    if (presence2 == null) {
                        throw new XMPPException("No response from server.");
                    } else if (presence2.getError() == null) {
                        this.nickname = str;
                        this.joined = true;
                        userHasJoined();
                        MUCUser mUCUserExtension = getMUCUserExtension(presence2);
                        if (mUCUserExtension == null || mUCUserExtension.getStatus() == null || !"201".equals(mUCUserExtension.getStatus().getCode())) {
                            leave();
                            throw new XMPPException("Creation failed - Missing acknowledge of room creation.");
                        }
                    } else {
                        throw new XMPPException(presence2.getError());
                    }
                } else {
                    throw new IllegalStateException("Creation failed - User already joined the room.");
                }
            }
        }
        throw new IllegalArgumentException("Nickname must not be null or blank.");
    }

    public Message createMessage() {
        return new Message(this.room, Message.Type.groupchat);
    }

    public Chat createPrivateChat(String str, MessageListener messageListener) {
        return this.connection.getChatManager().createChat(str, messageListener);
    }

    public void destroy(String str, String str2) throws XMPPException {
        MUCOwner mUCOwner = new MUCOwner();
        mUCOwner.setTo(this.room);
        mUCOwner.setType(IQ.Type.SET);
        MUCOwner.Destroy destroy = new MUCOwner.Destroy();
        destroy.setReason(str);
        destroy.setJid(str2);
        mUCOwner.setDestroy(destroy);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCOwner.getPacketID()));
        this.connection.sendPacket(mUCOwner);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getError() == null) {
            this.occupantsMap.clear();
            this.nickname = null;
            this.joined = false;
            userHasLeft();
        } else {
            throw new XMPPException(iq.getError());
        }
    }

    /* access modifiers changed from: protected */
    public void finalize() throws Throwable {
        List<String> list;
        try {
            if (this.connection != null && ((list = joinedRooms.get(this.connection)) == null || !list.contains(this.room))) {
                this.roomListenerMultiplexor.removeRoom(this.room);
                for (PacketListener packetListener : this.connectionListeners) {
                    this.connection.removePacketListener(packetListener);
                }
            }
        } catch (Exception unused) {
        }
        super.finalize();
    }

    public Collection<Affiliate> getAdmins() throws XMPPException {
        return getAffiliatesByOwner("admin");
    }

    public Form getConfigurationForm() throws XMPPException {
        MUCOwner mUCOwner = new MUCOwner();
        mUCOwner.setTo(this.room);
        mUCOwner.setType(IQ.Type.GET);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCOwner.getPacketID()));
        this.connection.sendPacket(mUCOwner);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getError() == null) {
            return Form.getFormFrom(iq);
        } else {
            throw new XMPPException(iq.getError());
        }
    }

    public Collection<Affiliate> getMembers() throws XMPPException {
        return getAffiliatesByAdmin("member");
    }

    public Collection<Occupant> getModerators() throws XMPPException {
        return getOccupants("moderator");
    }

    public String getNickname() {
        return this.nickname;
    }

    public Occupant getOccupant(String str) {
        Presence presence = this.occupantsMap.get(str);
        if (presence != null) {
            return new Occupant(presence);
        }
        return null;
    }

    public Presence getOccupantPresence(String str) {
        return this.occupantsMap.get(str);
    }

    public Iterator<String> getOccupants() {
        return Collections.unmodifiableList(new ArrayList(this.occupantsMap.keySet())).iterator();
    }

    public int getOccupantsCount() {
        return this.occupantsMap.size();
    }

    public Collection<Affiliate> getOutcasts() throws XMPPException {
        return getAffiliatesByAdmin("outcast");
    }

    public Collection<Affiliate> getOwners() throws XMPPException {
        return getAffiliatesByOwner("owner");
    }

    public Collection<Occupant> getParticipants() throws XMPPException {
        return getOccupants("participant");
    }

    public Form getRegistrationForm() throws XMPPException {
        Registration registration = new Registration();
        registration.setType(IQ.Type.GET);
        registration.setTo(this.room);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new AndFilter(new PacketIDFilter(registration.getPacketID()), new PacketTypeFilter(IQ.class)));
        this.connection.sendPacket(registration);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getType() != IQ.Type.ERROR) {
            return Form.getFormFrom(iq);
        } else {
            throw new XMPPException(iq.getError());
        }
    }

    public String getReservedNickname() {
        try {
            Iterator<DiscoverInfo.Identity> identities = ServiceDiscoveryManager.getInstanceFor(this.connection).discoverInfo(this.room, "x-roomuser-item").getIdentities();
            if (identities.hasNext()) {
                return identities.next().getName();
            }
            return null;
        } catch (XMPPException e2) {
            e2.printStackTrace();
            return null;
        }
    }

    public String getRoom() {
        return this.room;
    }

    public String getSubject() {
        return this.subject;
    }

    public void grantAdmin(String str) throws XMPPException {
        changeAffiliationByOwner(str, "admin");
    }

    public void grantAdmin(Collection<String> collection) throws XMPPException {
        changeAffiliationByOwner(collection, "admin");
    }

    public void grantMembership(String str) throws XMPPException {
        changeAffiliationByAdmin(str, "member", null);
    }

    public void grantMembership(Collection<String> collection) throws XMPPException {
        changeAffiliationByAdmin(collection, "member");
    }

    public void grantModerator(String str) throws XMPPException {
        changeRole(str, "moderator", null);
    }

    public void grantModerator(Collection<String> collection) throws XMPPException {
        changeRole(collection, "moderator");
    }

    public void grantOwnership(String str) throws XMPPException {
        changeAffiliationByOwner(str, "owner");
    }

    public void grantOwnership(Collection<String> collection) throws XMPPException {
        changeAffiliationByOwner(collection, "owner");
    }

    public void grantVoice(String str) throws XMPPException {
        changeRole(str, "participant", null);
    }

    public void grantVoice(Collection<String> collection) throws XMPPException {
        changeRole(collection, "participant");
    }

    /* access modifiers changed from: protected */
    public void initMultiplexor() {
        AnonymousClass7 r0 = new PacketListener() {
            /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass7 */

            @Override // asmack.org.jivesoftware.smack.PacketListener
            public void processPacket(Packet packet) {
                Message message = (Message) packet;
                MultiUserChat.this.subject = message.getSubject();
                MultiUserChat.this.fireSubjectUpdatedListeners(message.getSubject(), message.getFrom());
            }
        };
        PacketMultiplexListener packetMultiplexListener = new PacketMultiplexListener(this.messageCollector, new PacketListener() {
            /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass8 */

            @Override // asmack.org.jivesoftware.smack.PacketListener
            public void processPacket(Packet packet) {
                ArrayList arrayList;
                MultiUserChat multiUserChat;
                String str;
                Presence presence = (Presence) packet;
                String from = presence.getFrom();
                String str2 = String.valueOf(MultiUserChat.this.room) + "/" + MultiUserChat.this.nickname;
                boolean equals = presence.getFrom().equals(str2);
                if (presence.getType() == Presence.Type.available) {
                    Presence presence2 = (Presence) MultiUserChat.this.occupantsMap.put(from, presence);
                    if (presence2 != null) {
                        MUCUser mUCUserExtension = MultiUserChat.this.getMUCUserExtension(presence2);
                        String affiliation = mUCUserExtension.getItem().getAffiliation();
                        String role = mUCUserExtension.getItem().getRole();
                        MUCUser mUCUserExtension2 = MultiUserChat.this.getMUCUserExtension(presence);
                        String affiliation2 = mUCUserExtension2.getItem().getAffiliation();
                        MultiUserChat.this.checkRoleModifications(role, mUCUserExtension2.getItem().getRole(), equals, from);
                        MultiUserChat.this.checkAffiliationModifications(affiliation, affiliation2, equals, from);
                        return;
                    } else if (!equals) {
                        arrayList = new ArrayList();
                        arrayList.add(from);
                        multiUserChat = MultiUserChat.this;
                        str = "joined";
                    } else {
                        return;
                    }
                } else if (presence.getType() == Presence.Type.unavailable) {
                    MultiUserChat.this.occupantsMap.remove(from);
                    MUCUser mUCUserExtension3 = MultiUserChat.this.getMUCUserExtension(presence);
                    if (mUCUserExtension3 != null && mUCUserExtension3.getStatus() != null) {
                        MultiUserChat.this.checkPresenceCode(mUCUserExtension3.getStatus().getCode(), presence.getFrom().equals(str2), mUCUserExtension3, from);
                        return;
                    } else if (!equals) {
                        arrayList = new ArrayList();
                        arrayList.add(from);
                        multiUserChat = MultiUserChat.this;
                        str = "left";
                    } else {
                        return;
                    }
                } else {
                    return;
                }
                multiUserChat.fireParticipantStatusListeners(str, arrayList);
            }
        }, r0, new PacketListener() {
            /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass9 */

            @Override // asmack.org.jivesoftware.smack.PacketListener
            public void processPacket(Packet packet) {
                MUCUser mUCUserExtension = MultiUserChat.this.getMUCUserExtension(packet);
                if (mUCUserExtension.getDecline() != null && ((Message) packet).getType() != Message.Type.error) {
                    MultiUserChat.this.fireInvitationRejectionListeners(mUCUserExtension.getDecline().getFrom(), mUCUserExtension.getDecline().getReason());
                }
            }
        });
        this.roomListenerMultiplexor = RoomListenerMultiplexor.getRoomMultiplexor(this.connection);
        this.roomListenerMultiplexor.addRoom(this.room, packetMultiplexListener);
    }

    public void invite(Message message, String str, String str2) {
        message.setTo(this.room);
        MUCUser mUCUser = new MUCUser();
        MUCUser.Invite invite = new MUCUser.Invite();
        invite.setTo(str);
        invite.setReason(str2);
        mUCUser.setInvite(invite);
        message.addExtension(mUCUser);
        this.connection.sendPacket(message);
    }

    public void invite(String str, String str2) {
        invite(new Message(), str, str2);
    }

    public boolean isJoined() {
        return this.joined;
    }

    public void join(String str) throws XMPPException {
        join(str, null, null, (long) SmackConfiguration.getPacketReplyTimeout());
    }

    public void join(String str, String str2) throws XMPPException {
        join(str, str2, null, (long) SmackConfiguration.getPacketReplyTimeout());
    }

    public synchronized void join(String str, String str2, DiscussionHistory discussionHistory, long j) throws XMPPException {
        if (str != null) {
            if (!str.equals("")) {
                if (this.joined) {
                    leave();
                }
                Packet presence = new Presence(Presence.Type.available);
                presence.setTo(String.valueOf(this.room) + "/" + str);
                MUCInitialPresence mUCInitialPresence = new MUCInitialPresence();
                if (str2 != null) {
                    mUCInitialPresence.setPassword(str2);
                }
                if (discussionHistory != null) {
                    mUCInitialPresence.setHistory(discussionHistory.getMUCHistory());
                }
                presence.addExtension(mUCInitialPresence);
                for (PacketInterceptor packetInterceptor : this.presenceInterceptors) {
                    packetInterceptor.interceptPacket(presence);
                }
                PacketCollector packetCollector = null;
                try {
                    packetCollector = this.connection.createPacketCollector(new AndFilter(new FromMatchesFilter(String.valueOf(this.room) + "/" + str), new PacketTypeFilter(Presence.class)));
                    this.connection.sendPacket(presence);
                    Presence presence2 = (Presence) packetCollector.nextResult(j);
                    if (presence2 == null) {
                        throw new XMPPException("No response from server.");
                    } else if (presence2.getError() == null) {
                        this.nickname = str;
                        this.joined = true;
                        userHasJoined();
                    } else {
                        throw new XMPPException(presence2.getError());
                    }
                } finally {
                    if (packetCollector != null) {
                        packetCollector.cancel();
                    }
                }
            }
        }
        throw new IllegalArgumentException("Nickname must not be null or blank.");
    }

    public synchronized void joinRandom(String str, String str2, DiscussionHistory discussionHistory, long j) throws XMPPException {
        if (str != null) {
            if (!str.equals("")) {
                if (this.joined) {
                    leave();
                }
                Presence presence = new Presence(Presence.Type.available);
                presence.setTo(String.valueOf(this.room) + "/" + str);
                presence.attr.addAttribute("by", "group");
                MUCInitialPresence mUCInitialPresence = new MUCInitialPresence();
                if (str2 != null) {
                    mUCInitialPresence.setPassword(str2);
                }
                if (discussionHistory != null) {
                    mUCInitialPresence.setHistory(discussionHistory.getMUCHistory());
                }
                presence.addExtension(mUCInitialPresence);
                for (PacketInterceptor packetInterceptor : this.presenceInterceptors) {
                    packetInterceptor.interceptPacket(presence);
                }
                PacketCollector packetCollector = null;
                try {
                    packetCollector = this.connection.createPacketCollector(new AndFilter(new PacketTypeFilter(Presence.class)) {
                        /* class asmack.org.jivesoftware.smackx.muc.MultiUserChat.AnonymousClass2 */

                        @Override // asmack.org.jivesoftware.smack.filter.PacketFilter, asmack.org.jivesoftware.smack.filter.AndFilter
                        public boolean accept(Packet packet) {
                            int lastIndexOf;
                            if (super.accept(packet) && ((Presence) packet).getType() == Presence.Type.available) {
                                String from = packet.getFrom();
                                if (from.contains(MultiUserChat.this.room) && (lastIndexOf = from.lastIndexOf("/")) >= 0) {
                                    MultiUserChat.this.room = from.substring(0, lastIndexOf);
                                    MultiUserChat.this.initMultiplexor();
                                    return true;
                                }
                            }
                            return false;
                        }
                    });
                    this.connection.sendPacket(presence);
                    Presence presence2 = (Presence) packetCollector.nextResult(j);
                    if (presence2 == null) {
                        throw new XMPPException("No response from server.");
                    } else if (presence2.getError() == null) {
                        this.nickname = str;
                        this.joined = true;
                        userHasJoined();
                    } else {
                        throw new XMPPException(presence2.getError());
                    }
                } finally {
                    if (packetCollector != null) {
                        packetCollector.cancel();
                    }
                }
            }
        }
        throw new IllegalArgumentException("Nickname must not be null or blank.");
    }

    public void kickParticipant(String str, String str2) throws XMPPException {
        changeRole(str, "none", str2);
    }

    public synchronized void leave() {
        if (this.joined) {
            Presence presence = new Presence(Presence.Type.unavailable);
            presence.setTo(String.valueOf(this.room) + "/" + this.nickname);
            for (PacketInterceptor packetInterceptor : this.presenceInterceptors) {
                packetInterceptor.interceptPacket(presence);
            }
            this.connection.sendPacket(presence);
            this.occupantsMap.clear();
            this.nickname = null;
            this.joined = false;
            userHasLeft();
        }
    }

    public Message nextMessage() {
        return (Message) this.messageCollector.nextResult();
    }

    public Message nextMessage(long j) {
        return (Message) this.messageCollector.nextResult(j);
    }

    public Message pollMessage() {
        return (Message) this.messageCollector.pollResult();
    }

    public void removeInvitationRejectionListener(InvitationRejectionListener invitationRejectionListener) {
        synchronized (this.invitationRejectionListeners) {
            this.invitationRejectionListeners.remove(invitationRejectionListener);
        }
    }

    public void removeMessageListener(PacketListener packetListener) {
        this.connection.removePacketListener(packetListener);
        this.connectionListeners.remove(packetListener);
    }

    public void removeParticipantListener(PacketListener packetListener) {
        this.connection.removePacketListener(packetListener);
        this.connectionListeners.remove(packetListener);
    }

    public void removeParticipantStatusListener(ParticipantStatusListener participantStatusListener) {
        synchronized (this.participantStatusListeners) {
            this.participantStatusListeners.remove(participantStatusListener);
        }
    }

    public void removePresenceInterceptor(PacketInterceptor packetInterceptor) {
        this.presenceInterceptors.remove(packetInterceptor);
    }

    public void removeSubjectUpdatedListener(SubjectUpdatedListener subjectUpdatedListener) {
        synchronized (this.subjectUpdatedListeners) {
            this.subjectUpdatedListeners.remove(subjectUpdatedListener);
        }
    }

    public void removeUserStatusListener(UserStatusListener userStatusListener) {
        synchronized (this.userStatusListeners) {
            this.userStatusListeners.remove(userStatusListener);
        }
    }

    public void revokeAdmin(String str) throws XMPPException {
        changeAffiliationByOwner(str, "member");
    }

    public void revokeAdmin(Collection<String> collection) throws XMPPException {
        changeAffiliationByOwner(collection, "member");
    }

    public void revokeMembership(String str) throws XMPPException {
        changeAffiliationByAdmin(str, "none", null);
    }

    public void revokeMembership(Collection<String> collection) throws XMPPException {
        changeAffiliationByAdmin(collection, "none");
    }

    public void revokeModerator(String str) throws XMPPException {
        changeRole(str, "participant", null);
    }

    public void revokeModerator(Collection<String> collection) throws XMPPException {
        changeRole(collection, "participant");
    }

    public void revokeOwnership(String str) throws XMPPException {
        changeAffiliationByOwner(str, "admin");
    }

    public void revokeOwnership(Collection<String> collection) throws XMPPException {
        changeAffiliationByOwner(collection, "admin");
    }

    public void revokeVoice(String str) throws XMPPException {
        changeRole(str, "visitor", null);
    }

    public void revokeVoice(Collection<String> collection) throws XMPPException {
        changeRole(collection, "visitor");
    }

    public void sendConfigurationForm(Form form) throws XMPPException {
        MUCOwner mUCOwner = new MUCOwner();
        mUCOwner.setTo(this.room);
        mUCOwner.setType(IQ.Type.SET);
        mUCOwner.addExtension(form.getDataFormToSend());
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(mUCOwner.getPacketID()));
        this.connection.sendPacket(mUCOwner);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getError() != null) {
            throw new XMPPException(iq.getError());
        }
    }

    public void sendMessage(Message message) throws XMPPException {
        this.connection.sendPacket(message);
    }

    public void sendMessage(String str) throws XMPPException {
        Message message = new Message(this.room, Message.Type.groupchat);
        message.setBody(str);
        this.connection.sendPacket(message);
    }

    public void sendRegistrationForm(Form form) throws XMPPException {
        Registration registration = new Registration();
        registration.setType(IQ.Type.SET);
        registration.setTo(this.room);
        registration.addExtension(form.getDataFormToSend());
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new AndFilter(new PacketIDFilter(registration.getPacketID()), new PacketTypeFilter(IQ.class)));
        this.connection.sendPacket(registration);
        IQ iq = (IQ) createPacketCollector.nextResult((long) SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (iq == null) {
            throw new XMPPException("No response from server.");
        } else if (iq.getType() == IQ.Type.ERROR) {
            throw new XMPPException(iq.getError());
        }
    }
}