导航菜单

页面标题

页面副标题

95爱播免登录版 v3.1.9 - Workgroup.java 源代码

正在查看: 95爱播免登录版 v3.1.9 应用的 Workgroup.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package org.jivesoftware.smackx.workgroup.user;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.PacketCollector;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.AndFilter;
import org.jivesoftware.smack.filter.FromContainsFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketIDFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.Form;
import org.jivesoftware.smackx.FormField;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.jivesoftware.smackx.muc.InvitationListener;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.packet.DataForm;
import org.jivesoftware.smackx.packet.MUCUser;
import org.jivesoftware.smackx.workgroup.MetaData;
import org.jivesoftware.smackx.workgroup.WorkgroupInvitation;
import org.jivesoftware.smackx.workgroup.WorkgroupInvitationListener;
import org.jivesoftware.smackx.workgroup.ext.forms.WorkgroupForm;
import org.jivesoftware.smackx.workgroup.packet.DepartQueuePacket;
import org.jivesoftware.smackx.workgroup.packet.QueueUpdate;
import org.jivesoftware.smackx.workgroup.packet.SessionID;
import org.jivesoftware.smackx.workgroup.packet.UserID;
import org.jivesoftware.smackx.workgroup.settings.ChatSetting;
import org.jivesoftware.smackx.workgroup.settings.ChatSettings;
import org.jivesoftware.smackx.workgroup.settings.OfflineSettings;
import org.jivesoftware.smackx.workgroup.settings.SoundSettings;
import org.jivesoftware.smackx.workgroup.settings.WorkgroupProperties;

public class Workgroup {
    private Connection connection;
    private boolean inQueue;
    private List<WorkgroupInvitationListener> invitationListeners;
    private List<QueueListener> queueListeners;
    private int queuePosition = -1;
    private int queueRemainingTime = -1;
    private String workgroupJID;

    private class JoinQueuePacket extends IQ {
        private DataForm form;
        private String userID;

        public JoinQueuePacket(String str, Form form, String str2) {
            this.userID = null;
            this.userID = str2;
            setTo(str);
            setType(IQ.Type.SET);
            DataForm dataFormToSend = form.getDataFormToSend();
            this.form = dataFormToSend;
            addExtension(dataFormToSend);
        }

        public String getChildElementXML() {
            StringBuilder sb = new StringBuilder();
            sb.append("<join-queue xmlns=\"http://jabber.org/protocol/workgroup\">");
            sb.append("<queue-notifications/>");
            if (Workgroup.this.connection.isAnonymous()) {
                sb.append(new UserID(this.userID).toXML());
            }
            sb.append(this.form.toXML());
            sb.append("</join-queue>");
            return sb.toString();
        }
    }

    public Workgroup(String str, Connection connection) {
        if (!connection.isAuthenticated()) {
            throw new IllegalStateException("Must login to server before creating workgroup.");
        }
        this.workgroupJID = str;
        this.connection = connection;
        this.inQueue = false;
        this.invitationListeners = new ArrayList();
        this.queueListeners = new ArrayList();
        addQueueListener(new QueueListener() {
            @Override
            public void departedQueue() {
                Workgroup.this.inQueue = false;
                Workgroup.this.queuePosition = -1;
                Workgroup.this.queueRemainingTime = -1;
            }

            @Override
            public void joinedQueue() {
                Workgroup.this.inQueue = true;
            }

            @Override
            public void queuePositionUpdated(int i) {
                Workgroup.this.queuePosition = i;
            }

            @Override
            public void queueWaitTimeUpdated(int i) {
                Workgroup.this.queueRemainingTime = i;
            }
        });
        MultiUserChat.addInvitationListener(connection, new InvitationListener() {
            @Override
            public void invitationReceived(Connection connection2, String str2, String str3, String str4, String str5, Message message) {
                Workgroup.this.inQueue = false;
                Workgroup.this.queuePosition = -1;
                Workgroup.this.queueRemainingTime = -1;
            }
        });
        connection.addPacketListener(new PacketListener() {
            public void processPacket(Packet packet) {
                Workgroup.this.handlePacket(packet);
            }
        }, new PacketTypeFilter(Message.class));
    }

    private void fireInvitationEvent(WorkgroupInvitation workgroupInvitation) {
        synchronized (this.invitationListeners) {
            Iterator<WorkgroupInvitationListener> it = this.invitationListeners.iterator();
            while (it.hasNext()) {
                it.next().invitationReceived(workgroupInvitation);
            }
        }
    }

    private void fireQueueDepartedEvent() {
        synchronized (this.queueListeners) {
            Iterator<QueueListener> it = this.queueListeners.iterator();
            while (it.hasNext()) {
                it.next().departedQueue();
            }
        }
    }

    private void fireQueueJoinedEvent() {
        synchronized (this.queueListeners) {
            Iterator<QueueListener> it = this.queueListeners.iterator();
            while (it.hasNext()) {
                it.next().joinedQueue();
            }
        }
    }

    private void fireQueuePositionEvent(int i) {
        synchronized (this.queueListeners) {
            Iterator<QueueListener> it = this.queueListeners.iterator();
            while (it.hasNext()) {
                it.next().queuePositionUpdated(i);
            }
        }
    }

    private void fireQueueTimeEvent(int i) {
        synchronized (this.queueListeners) {
            Iterator<QueueListener> it = this.queueListeners.iterator();
            while (it.hasNext()) {
                it.next().queueWaitTimeUpdated(i);
            }
        }
    }

    public void handlePacket(Packet packet) {
        if (packet instanceof Message) {
            Message message = (Message) packet;
            PacketExtension extension = message.getExtension("depart-queue", "http://jabber.org/protocol/workgroup");
            PacketExtension extension2 = message.getExtension(QueueUpdate.ELEMENT_NAME, "http://jabber.org/protocol/workgroup");
            if (extension != null) {
                fireQueueDepartedEvent();
                return;
            }
            if (extension2 != null) {
                QueueUpdate queueUpdate = (QueueUpdate) extension2;
                if (queueUpdate.getPosition() != -1) {
                    fireQueuePositionEvent(queueUpdate.getPosition());
                }
                if (queueUpdate.getRemaingTime() != -1) {
                    fireQueueTimeEvent(queueUpdate.getRemaingTime());
                    return;
                }
                return;
            }
            MUCUser mUCUser = (MUCUser) message.getExtension("x", "http://jabber.org/protocol/muc#user");
            MUCUser.Invite invite = mUCUser != null ? mUCUser.getInvite() : null;
            if (invite == null || !this.workgroupJID.equals(invite.getFrom())) {
                return;
            }
            PacketExtension extension3 = message.getExtension(SessionID.ELEMENT_NAME, "http://jivesoftware.com/protocol/workgroup");
            String sessionID = extension3 != null ? ((SessionID) extension3).getSessionID() : null;
            PacketExtension extension4 = message.getExtension(MetaData.ELEMENT_NAME, "http://jivesoftware.com/protocol/workgroup");
            fireInvitationEvent(new WorkgroupInvitation(this.connection.getUser(), message.getFrom(), this.workgroupJID, sessionID, message.getBody(), message.getFrom(), extension4 != null ? ((MetaData) extension4).getMetaData() : null));
        }
    }

    public void addInvitationListener(WorkgroupInvitationListener workgroupInvitationListener) {
        synchronized (this.invitationListeners) {
            if (!this.invitationListeners.contains(workgroupInvitationListener)) {
                this.invitationListeners.add(workgroupInvitationListener);
            }
        }
    }

    public void addQueueListener(QueueListener queueListener) {
        synchronized (this.queueListeners) {
            if (!this.queueListeners.contains(queueListener)) {
                this.queueListeners.add(queueListener);
            }
        }
    }

    public void departQueue() throws XMPPException {
        if (this.inQueue) {
            DepartQueuePacket departQueuePacket = new DepartQueuePacket(this.workgroupJID);
            PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(departQueuePacket.getPacketID()));
            this.connection.sendPacket(departQueuePacket);
            IQ nextResult = createPacketCollector.nextResult(5000L);
            createPacketCollector.cancel();
            if (nextResult == null) {
                throw new XMPPException("No response from the server.");
            }
            if (nextResult.getError() != null) {
                throw new XMPPException(nextResult.getError());
            }
            fireQueueDepartedEvent();
        }
    }

    public ChatSetting getChatSetting(String str) throws XMPPException {
        return getChatSettings(str, -1).getFirstEntry();
    }

    public ChatSettings getChatSettings(int i) throws XMPPException {
        return getChatSettings(null, i);
    }

    public OfflineSettings getOfflineSettings() throws XMPPException {
        OfflineSettings offlineSettings = new OfflineSettings();
        offlineSettings.setType(IQ.Type.GET);
        offlineSettings.setTo(this.workgroupJID);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(offlineSettings.getPacketID()));
        this.connection.sendPacket(offlineSettings);
        OfflineSettings nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (nextResult == null) {
            throw new XMPPException("No response from server.");
        }
        if (nextResult.getError() == null) {
            return nextResult;
        }
        throw new XMPPException(nextResult.getError());
    }

    public int getQueuePosition() {
        return this.queuePosition;
    }

    public int getQueueRemainingTime() {
        return this.queueRemainingTime;
    }

    public SoundSettings getSoundSettings() throws XMPPException {
        SoundSettings soundSettings = new SoundSettings();
        soundSettings.setType(IQ.Type.GET);
        soundSettings.setTo(this.workgroupJID);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(soundSettings.getPacketID()));
        this.connection.sendPacket(soundSettings);
        SoundSettings nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (nextResult == null) {
            throw new XMPPException("No response from server.");
        }
        if (nextResult.getError() == null) {
            return nextResult;
        }
        throw new XMPPException(nextResult.getError());
    }

    public Form getWorkgroupForm() throws XMPPException {
        WorkgroupForm workgroupForm = new WorkgroupForm();
        workgroupForm.setType(IQ.Type.GET);
        workgroupForm.setTo(this.workgroupJID);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(workgroupForm.getPacketID()));
        this.connection.sendPacket(workgroupForm);
        WorkgroupForm nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (nextResult == null) {
            throw new XMPPException("No response from server on status set.");
        }
        if (nextResult.getError() == null) {
            return Form.getFormFrom(nextResult);
        }
        throw new XMPPException(nextResult.getError());
    }

    public String getWorkgroupJID() {
        return this.workgroupJID;
    }

    public WorkgroupProperties getWorkgroupProperties() throws XMPPException {
        WorkgroupProperties workgroupProperties = new WorkgroupProperties();
        workgroupProperties.setType(IQ.Type.GET);
        workgroupProperties.setTo(this.workgroupJID);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(workgroupProperties.getPacketID()));
        this.connection.sendPacket(workgroupProperties);
        WorkgroupProperties nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (nextResult == null) {
            throw new XMPPException("No response from server.");
        }
        if (nextResult.getError() == null) {
            return nextResult;
        }
        throw new XMPPException(nextResult.getError());
    }

    public boolean isAvailable() {
        Presence.Type type = Presence.Type.available;
        Presence presence = new Presence(type);
        presence.setTo(this.workgroupJID);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new AndFilter(new PacketFilter[]{new FromContainsFilter(this.workgroupJID), new PacketTypeFilter(Presence.class)}));
        this.connection.sendPacket(presence);
        Presence nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        return nextResult != null && nextResult.getError() == null && type == nextResult.getType();
    }

    public boolean isEmailAvailable() {
        try {
            return ServiceDiscoveryManager.getInstanceFor(this.connection).discoverInfo(StringUtils.parseServer(this.workgroupJID)).containsFeature("jive:email:provider");
        } catch (XMPPException unused) {
            return false;
        }
    }

    public boolean isInQueue() {
        return this.inQueue;
    }

    public void joinQueue() throws XMPPException {
        joinQueue(null);
    }

    public void removeQueueListener(QueueListener queueListener) {
        synchronized (this.queueListeners) {
            this.queueListeners.remove(queueListener);
        }
    }

    public ChatSettings getChatSettings() throws XMPPException {
        return getChatSettings(null, -1);
    }

    public void joinQueue(Form form) throws XMPPException {
        joinQueue(form, (String) null);
    }

    private ChatSettings getChatSettings(String str, int i) throws XMPPException {
        ChatSettings chatSettings = new ChatSettings();
        if (str != null) {
            chatSettings.setKey(str);
        }
        if (i != -1) {
            chatSettings.setType(i);
        }
        chatSettings.setType(IQ.Type.GET);
        chatSettings.setTo(this.workgroupJID);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(chatSettings.getPacketID()));
        this.connection.sendPacket(chatSettings);
        ChatSettings nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (nextResult != null) {
            if (nextResult.getError() == null) {
                return nextResult;
            }
            throw new XMPPException(nextResult.getError());
        }
        throw new XMPPException("No response from server.");
    }

    public void joinQueue(Form form, String str) throws XMPPException {
        if (!this.inQueue) {
            JoinQueuePacket joinQueuePacket = new JoinQueuePacket(this.workgroupJID, form, str);
            PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(joinQueuePacket.getPacketID()));
            this.connection.sendPacket(joinQueuePacket);
            IQ nextResult = createPacketCollector.nextResult(10000L);
            createPacketCollector.cancel();
            if (nextResult != null) {
                if (nextResult.getError() == null) {
                    fireQueueJoinedEvent();
                    return;
                }
                throw new XMPPException(nextResult.getError());
            }
            throw new XMPPException("No response from the server.");
        }
        throw new IllegalStateException("Already in queue " + this.workgroupJID);
    }

    public void removeQueueListener(WorkgroupInvitationListener workgroupInvitationListener) {
        synchronized (this.invitationListeners) {
            this.invitationListeners.remove(workgroupInvitationListener);
        }
    }

    public WorkgroupProperties getWorkgroupProperties(String str) throws XMPPException {
        WorkgroupProperties workgroupProperties = new WorkgroupProperties();
        workgroupProperties.setJid(str);
        workgroupProperties.setType(IQ.Type.GET);
        workgroupProperties.setTo(this.workgroupJID);
        PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(workgroupProperties.getPacketID()));
        this.connection.sendPacket(workgroupProperties);
        WorkgroupProperties nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
        createPacketCollector.cancel();
        if (nextResult != null) {
            if (nextResult.getError() == null) {
                return nextResult;
            }
            throw new XMPPException(nextResult.getError());
        }
        throw new XMPPException("No response from server.");
    }

    public void joinQueue(Map<String, Object> map, String str) throws XMPPException {
        if (!this.inQueue) {
            Form form = new Form("submit");
            for (String str2 : map.keySet()) {
                String obj = map.get(str2).toString();
                String escapeForXML = StringUtils.escapeForXML(str2);
                String escapeForXML2 = StringUtils.escapeForXML(obj);
                FormField formField = new FormField(escapeForXML);
                formField.setType("text-single");
                form.addField(formField);
                form.setAnswer(escapeForXML, escapeForXML2);
            }
            joinQueue(form, str);
            return;
        }
        throw new IllegalStateException("Already in queue " + this.workgroupJID);
    }
}