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

📄 bsinfoquerybean.java

📁 一款即时通讯软件
💻 JAVA
字号:
package edu.ou.kmi.buddyspace.core;

/*
 * BSInfoQueryBean.java
 *
 * Project: BuddySpace
 * (C) Copyright Knowledge Media Institute 2002
 *
 *
 * Created on 16 July 2002, 12:31
 */

import java.util.*;
import org.jabber.jabberbeans.*;
import org.jabber.jabberbeans.util.*;
import org.jabber.jabberbeans.Extension.*;

/**
 * <code>BSInfoQueryBean</code> handles IQ part of jabber protocol.
 * It relies on <code>BSConnectionBean</code> which provides actual connection.
 * <code>BSInfoQuery</code>.<code>setConnection</code> function must be called
 * after each connection establishment.
 *
 * @author  Jiri Komzak, Knowledge Media Institute, Open University, United Kingdom
 */
public class BSInfoQueryBean implements PacketListener {
    private Hashtable servedIDs = null;
    private IQBean iqBean = null;
    private final String name = "IQ";
    private Vector iqListeners = null;
    
    /**
     * Constructor
     */
    BSInfoQueryBean() {
         servedIDs = new Hashtable();
         iqListeners = new Vector();
    }
    
    /**
     * Constructor, which sets existing and connected <code>ConnectionBean</code>.
     * Then <code>IQBean</code> is created and this is registered
     * as listener for IQ packets.
     */
    BSInfoQueryBean(ConnectionBean connection) {
         servedIDs = new Hashtable();
         iqListeners = new Vector();
         setConnection(connection);
    }
    
    /**
     * Sets existing and connected <code>ConnectionBean</code>.
     * Then <code>IQBean</code> is created and this is registered
     * as listener for IQ packets.
     */
    protected void setConnection(ConnectionBean connection) {
         iqBean = new IQBean(connection);
         //iqBean.setConnection(connection);
         iqBean.addPacketListener(this);
         servedIDs = null;
    }
    
    /**
     * Returns currently used <code>ConnectionBean</code>.
     */
    protected ConnectionBean getConnection() {
        return (iqBean != null)? iqBean.getConnection() : null;
    }
    
    /**
     * Returns currently used <code>IQBean</code>.
     */
    public IQBean getIQBean() {
        return iqBean;
    }
    
    /**
     * Frees all object bindings to allow object destroy
     */
    protected void prepareToDestroy() {
        //removeAllIQListeners();
        iqBean = null;
    }
    
    /**
     * Invoked when a message packet is received.
     */
    public void receivedPacket(PacketEvent packetEvent) {
        if (!(packetEvent.getPacket() instanceof InfoQuery))
            return;
        
        tryOOB(packetEvent);
    }
    
    /**
     * Invoked when a message packet send failes.
     */
    public void sendFailed(PacketEvent packetEvent) {
    }
    
    /**
     * Invoked when a message packet is sent.
     */
    public void sentPacket(PacketEvent packetEvent) {
    }
    
    /**
     * Checks if some OOB data extension was received; if
     * so calls fireOOBReceived.
     */
    private void tryOOB(PacketEvent packetEvent) {
        InfoQuery iq = (InfoQuery) packetEvent.getPacket();
        
        String type = iq.getType();
        if (!(new String("set")).equals(type))
            return;
        
        Enumeration exts = iq.Extensions();
        while (exts.hasMoreElements()) {
            Extension e = (Extension) exts.nextElement();
            if (e instanceof OOB) {
                OOB oob = (OOB) e;
                String url = oob.getURL();
                JID jid = iq.getFromAddress();
                //BSCore.downloadURL(url, jid);
                fireOOBReceived(url, jid);
            }
        }
    }
    
    /**
     * Sends packet including OOB extension. Does transfer the data!
     */
    public void sendOOB(JID jid, String url) {
        if (url == null || jid == null) return;
        if (iqBean == null || iqBean.getConnection() == null) {
            BSCore.logEvent(name, "error: not connected");
            //servedID = null;
            return;
        }

        // gets agents list
        //servedID = new String("OOB_" + String.valueOf(BSCore.getNextID()));
        InfoQueryBuilder iqBuilder = new InfoQueryBuilder();
        OOBBuilder oobBuilder = new OOBBuilder();
        oobBuilder.setIQ(true);
        oobBuilder.setURL(url);
        
        try {
            iqBuilder.addExtension(oobBuilder.build());
            iqBuilder.setType("set");
            //iqBuilder.setIdentifier(servedID);
            iqBuilder.setToAddress(jid);
            //iqBean.send((InfoQuery)iqBuilder.build());
            iqBean.getConnection().send(iqBuilder.build());
        } catch (InstantiationException e) {
            BSCore.logEvent(name, "error: IQ builder failed");
            //servedID = null;
        }
        
        BSCore.logEvent(name, "iq-oob sent");
    }
    
    /**
     * Adds <code>BSIQListener</code>
     */
    public void addIQListener(BSIQListener listener) {
        //assert listener != null : listener;
        if (listener == null) return;
        if (!iqListeners.contains(listener)) {
            iqListeners.addElement(listener);
        }
    }
    
    /**
     * Notifies all <code>BSIQListener</code>s that an OOB extension
     * was received.
     */
    private void fireOOBReceived(String url, JID jid) {
        for (Enumeration e = iqListeners.elements(); e.hasMoreElements(); ) {
            BSIQListener listener = (BSIQListener) e.nextElement();
            
            listener.oobReceived(url, jid);
        }
    }
    
}

⌨️ 快捷键说明

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