⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bspubsubbean.java

📁 一款即时通讯软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * when <code>nodeName</code> is <code>null</code>. */
    protected boolean requestNodeConfImpl(JID jid, String nodeName, PacketID id) {
        if (connBean == null || jid == null) return false;

        try {
            PubsubOwnerOpsBuilder poob = new PubsubOwnerOpsBuilder();
            poob.setName("configure");
            poob.setNode(nodeName);

            XPubsubOwnerBuilder xpob = new XPubsubOwnerBuilder();
            xpob.setChild(new PubsubOwnerOps(poob));
            XPubsubOwner xpo = new XPubsubOwner(xpob);

            return sendIQ(xpo, jid, "get", id);
        } catch (InstantiationException e) {
            return false;
        }
    }


    /** Sets configuration of node. */
    public boolean setNodeConfiguration(XData form, JID jid,
                                   String nodeName, PacketID id) {
        if (connBean == null || nodeName == null || jid == null || form == null)
            return false;

        try {
            PubsubOwnerOpsBuilder poob = new PubsubOwnerOpsBuilder();
            poob.setName("configure");
            poob.setNode(nodeName);
            poob.setForm(form);

            XPubsubOwnerBuilder xpob = new XPubsubOwnerBuilder();
            xpob.setChild(new PubsubOwnerOps(poob));
            XPubsubOwner xpo = new XPubsubOwner(xpob);

            return sendIQ(xpo, jid, "set", id);
        } catch (InstantiationException e) {
            return false;
        }
    }


    /** Requests all entities affiliated. */
    public boolean requestEntities(JID jid, String nodeName, PacketID id) {
        if (connBean == null || nodeName == null || jid == null) return false;

        try {
            PubsubEntitiesBuilder peb = new PubsubEntitiesBuilder();
            peb.setNode(nodeName);

            IQPubsubBuilder pb = new IQPubsubBuilder();
            pb.setChild(new PubsubEntities(peb));
            IQPubsub iqp = new IQPubsub(pb);

            return sendIQ(iqp, jid, "get", id);
        } catch (InstantiationException e) {
            return false;
        }
    }


    /** Sets entity affiliation. */
    public boolean setEntities(PubsubEntity entity, JID jid, String nodeName, PacketID id) {
        if (entity == null) return false;

        return setEntities(new PubsubEntity[] {entity}, jid, nodeName, id);
    }


    /** Sets entities affiliations. */
    public boolean setEntities(PubsubEntity[] entities, JID jid, String nodeName, PacketID id) {
        if (connBean == null || nodeName == null || jid == null ||
            entities == null || entities.length == 0)
            return false;

        try {
            PubsubEntitiesBuilder peb = new PubsubEntitiesBuilder();
            peb.setNode(nodeName);
            for (int i=0; i<entities.length; i++)
                if (entities[i] != null)
                    peb.addEntity(entities[i]);

            IQPubsubBuilder pb = new IQPubsubBuilder();
            pb.setChild(new PubsubEntities(peb));
            IQPubsub iqp = new IQPubsub(pb);

            return sendIQ(iqp, jid, "set", id);
        } catch (InstantiationException e) {
            return false;
        }
    }


    /** Sends iq packet with given extension */
    public boolean sendIQ(Extension ext, JID toJID, String type, PacketID id) {
        if (connBean == null || toJID == null || type == null) return false;
        try {
            InfoQueryBuilder iqb = new InfoQueryBuilder();
            iqb.setType(type);
            iqb.setToAddress(toJID);
            iqb.setIdentifier(id.getID());
            iqb.addExtension(ext);
            InfoQuery iq = (InfoQuery) iqb.build();
            if (id != null) id.setID(iq.getIdentifier());

            connBean.send(iq);
            return true;
        } catch (InstantiationException e) {
            return false;
        }
    }

    /**
     * Frees all object bindings to allow object destroy
     */
    protected void prepareToDestroy() {
        //removeAllBrowseListeners();
        if (connBean != null) {
            connBean.delPacketListener(this);
            connBean = null;
        }
    }

    // *** LISTENER METHODS ***

    /** called when a packet is received and processed.
     */
    public void receivedPacket(PacketEvent pe) {
        if (pe == null) return;
        Packet p = pe.getPacket();
        if (p == null) return;
        //if (p == null || !(p instanceof InfoQuery)) return;
        if (p == null || !(p instanceof InfoQuery || p instanceof Message)) return;
        if (p instanceof InfoQuery)
            handleInfoQuery((InfoQuery)p);
        else if (p instanceof Message)
            handleMessage((Message)p);
    }


    /** handles received infoQuery packets */
    public void handleInfoQuery(InfoQuery iq) {
        String id = iq.getIdentifier();
        String type = iq.getType();
        Enumeration extEnum = iq.Extensions();
        // empty result - possibly of "set"
        if (!extEnum.hasMoreElements() && "result".equalsIgnoreCase(type))
            fireEmptyResultReceived(iq, id);
        // empty error - possibly of "set"
        else if (!extEnum.hasMoreElements() && "error".equalsIgnoreCase(type))
            fireError(iq, id);
        else while (extEnum.hasMoreElements()) {
            Object e = extEnum.nextElement();
            if (e instanceof IQPubsub) {
                if ("result".equalsIgnoreCase(type)) {
                    XMLData child = ((IQPubsub)e).child();
                    if (child == null)
                        fireEmptyResultReceived(iq, id);
                    else if (child instanceof PubsubCreate)
                        fireInstantNodeCreated(iq, ((PubsubCreate)child).getNode(), id);
                    else if (child instanceof PubsubEntity)
                        fireSubscriptionResult(iq, (PubsubEntity)child, id);
                    else if (child instanceof PubsubEntities)
                        fireNodeEntities(iq, (PubsubEntities)child, id);
                    else if (child instanceof PubsubAffiliations)
                        fireAffiliationsReceived(iq, (PubsubAffiliations)child, id);
                    else if (child instanceof PubsubOptions)
                        fireOptionsReceived(iq, (PubsubOptions)child, id);
                    else if (child instanceof PubsubItems)
                        fireItemsReceived(iq, (PubsubItems)child, id);
                }
                else if ("get".equalsIgnoreCase(type))
                    ;//fireItemsRequestReceived(iq, id);
                else if ("error".equalsIgnoreCase(type))
                    fireError(iq, id);
            }
            else if (e instanceof XPubsubOwner) {
                if ("result".equalsIgnoreCase(type)) {
                    XMLData child = ((XPubsubOwner)e).child();
                    if (child == null)
                        fireEmptyResultReceived(iq, id);
                    else if (child instanceof PubsubOwnerOps) {
                        if ("configure".equals(((PubsubOwnerOps)child).getName()))
                            fireConfigureReceived(iq, (PubsubOwnerOps)child, id);
                    }
                }
                else if ("get".equalsIgnoreCase(type))
                    ;//fireInfoRequestReceived(iq, id);
                else if ("error".equalsIgnoreCase(type))
                    fireError(iq, id);
            }
        }
    }

    /** handles received message packets */
    public void handleMessage(Message m) {
        String id = m.getIdentifier();
        String type = m.getType();
        JID jid = m.getFromAddress();
        Enumeration extEnum = m.Extensions();
        // no extensions - nothing interesting for us
        if (!extEnum.hasMoreElements())
            return;
        else while (extEnum.hasMoreElements()) {
            Object e = extEnum.nextElement();
            if (e instanceof XPubsubEvent) {
                if ("error".equalsIgnoreCase(type))
                    ;//fireError(m, id);
                else {
                    XMLData child = ((XPubsubEvent)e).child();
                    if (child == null) { }
                    else if (child instanceof PubsubEventItems) {
                        fireItemsEvent(m, (PubsubEventItems)child, id);
                    }
                    else if (child instanceof PubsubOwnerOps) {
                        if ("delete".equalsIgnoreCase(((PubsubOwnerOps)child).getName()))
                            fireNodeDeletedEvent(m, ((PubsubOwnerOps)child).getNode(), id);
                    }
                }
            }
            else if (e instanceof XPubsubOwner) {
                if ("error".equalsIgnoreCase(type))
                    ;//fireError(m, id);
                else {
                }
            }
        } //while
    }

    /** called if a packet is not successfully sent (for instance, if the connection
     * dies while the packet is queued, or a packet is sent while disconnected).
     */
    public void sendFailed(PacketEvent pe) {
        /*if (pe == null) return;
        Packet p = pe.getPacket();
        //if (p == null || ! p instanceof InfoQuery) return;
        if (p == null || !(p instanceof ContentPacket)) return;
        String id = ((ContentPacket)p).getIdentifier();
        String type = ((ContentPacket)p).getType();
        Enumeration extEnum = ((ContentPacket)p).Extensions();
        while (extEnum.hasMoreElements()) {
            Object e = extEnum.nextElement();
            if (e instanceof IQDiscoItems /*|| e instanceof IQDiscoInfo* /) {
                fireSendFailed((InfoQuery)p, id);
            }
        }*/
    }

    /** called whenever a local client sends a packet, after the sending
     * is successful
     */
    public void sentPacket(PacketEvent pe) { }

    // *** browse listeners ***

    /**
     * Adds <code>BSPubsubListener</code> to listeners notified when
     * pubsub events.
     */
    public void addPubsubListener(BSPubsubListener listener) {
        if (pubsubListeners.contains(listener)) return;
        pubsubListeners.add(listener);
    }

    /**
     * Removes <code>BSPubsubListener</code> to listeners notified about
     * pubsub events.
     */
    public void removePubsubListener(BSPubsubListener listener) {
        pubsubListeners.remove(listener);
    }


    /**
     * Removes all listeners notified when presence state of some of buddies changes.
     * This can be used before to free dependencies and allow dispose of
     * all objects.
     */
    public void removeAllPubsubListeners() {
        pubsubListeners.clear();
    }

    /**
     * Notifies pubsub listeners about received result of instant node creation.
     */
    private void fireInstantNodeCreated(InfoQuery iq, String nodeName, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.instantNodeCreated(iq, nodeName, id);
        }
    }

    /**
     * Notifies pubsub listeners about received event - deleted node.
     */
    private void fireNodeDeletedEvent(Message m, String nodeName, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.nodeDeletedEvent(m, nodeName, id);
        }
    }


    /**
     * Notifies pubsub listeners about received items event - published or retracted items.
     */
    private void fireItemsEvent(Message m, PubsubEventItems items, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.itemsEvent(m, items, id);
        }
    }


    /**
     * Notifies pubsub listeners about result of subscription request.
     */
    private void fireSubscriptionResult(InfoQuery iq, PubsubEntity entity, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.subscriptionResult(iq, entity, id);
        }
    }


    /**
     * Notifies pubsub listeners about result of affiliations request.
     */
    private void fireAffiliationsReceived(InfoQuery iq, PubsubAffiliations affs, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.affiliationsReceived(iq, affs, id);
        }
    }


    /**
     * Notifies pubsub listeners about result of options request.
     */
    private void fireOptionsReceived(InfoQuery iq, PubsubOptions options, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.optionsReceived(iq, options, id);
        }
    }


    /**
     * Notifies pubsub listeners about result of items request.
     */
    private void fireItemsReceived(InfoQuery iq, PubsubItems items, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.itemsReceived(iq, items, id);
        }
    }


    /**
     * Notifies pubsub listeners about result of configure request.
     */
    private void fireConfigureReceived(InfoQuery iq, PubsubOwnerOps configure, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.configureReceived(iq, configure, id);
        }
    }


    /**
     * Notifies pubsub listeners about received entities in node.
     */
    private void fireNodeEntities(InfoQuery iq, PubsubEntities entities, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.nodeEntities(iq, entities, id);
        }
    }


    /**
     * Notifies pubsub listeners about received empty result possibly of previous "set".
     */
    private void fireEmptyResultReceived(InfoQuery iq, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.receivedEmptyResult(iq, id);
        }
    }

    /**
     * Notifies pubsub listeners about received error.
     */
    private void fireError(InfoQuery iq, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.error(iq, id);
        }
    }

    /**
     * Notifies pubsub listeners about send failure.
     */
    private void fireSendFailed(InfoQuery iq, String id) {
        for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
            BSPubsubListener listener = (BSPubsubListener) e.nextElement();
            listener.sendFailed(iq, id);
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -