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

📄 bsconfbean.java

📁 一款即时通讯软件
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            iqBean.getConnection().send(iqBuilder.build());
        } catch (InstantiationException e) {
            BSCore.logEvent(name, "error: IQ builder failed");
            fireError(roomAddress, "", "IQ builder failed");
            roomInfo.servedID = null;
            roomInfo.setState(BSConfRoomInfo.NOT_LOGGED);
            return false;
        }
        roomInfo.setState(BSConfRoomInfo.LOGGING2);

        return true;
    }

    /**
     * Invoked when a message or iq packet is received.
     */
    public void receivedPacket(PacketEvent pe) {

        if (pe.getPacket() instanceof Message) {
            Message msg = (Message) pe.getPacket();
            handleMessage(msg);
            return;
        }

        else if (pe.getPacket() instanceof InfoQuery) {
            InfoQuery iq = (InfoQuery) pe.getPacket();
            handleInfoQuery(iq);
            return;
        }

        else {
            //BSCore.logEvent(name, "warning: non-map packet received");
            return;
        }
    }

    /** Handles received IQ packet */
    private void handleInfoQuery(InfoQuery iq) {
        JID roomJID = iq.getFromAddress();
        String type = iq.getType();

        if (type == null) {
            fireError(roomJID, "", "IQ packet without type");
            BSCore.logEvent(name, "error: IQ packet without type");
            return;
        }

        // gets room info for given roomJID
        //String str = BSPresenceBean.getJIDHashString(roomJID, false);
        JID key = roomJID.getSimpleJID();
        //BSConfRoomInfo ri = (BSConfRoomInfo) rooms.get(str.toLowerCase());
        BSConfRoomInfo ri = (BSConfRoomInfo) rooms.get(key);

        if (ri == null) return;

        if (type.equals("result"))
            handleIQResult(iq, ri);
        else if (type.equals("set"))
            handleIQSet(iq, ri);
        else if (type.equals("error"))
            handleIQError(iq, ri);
        else if (type.equals("get"))
            ;//handleIQGet(iq, ri);
        else {
            fireError(roomJID, "", "IQ packet with unknown type");
            BSCore.logEvent(name, "error: IQ packet with unknown type");
        }
    }

    /** Handles IQ error */
    private void handleIQError(InfoQuery iq, BSConfRoomInfo ri) {
        if (ri.state == BSConfRoomInfo.LOGGING2)
            ri.setState(BSConfRoomInfo.NOT_LOGGED);

        fireError(ri.roomJID, iq.getErrorCode(), iq.getErrorText());
    }

    /** Handles received message */
    private void handleMessage(Message msg) {
        maybeHandleInvitation(msg);

        // gets room info for JID room
        JID jid = msg.getFromAddress();
        //String str = BSPresenceBean.getJIDHashString(jid, false);
        JID key = jid.getSimpleJID();
        //BSConfRoomInfo ri = (BSConfRoomInfo) rooms.get(str.toLowerCase());
        BSConfRoomInfo ri = (BSConfRoomInfo) rooms.get(key);

        if (ri == null) return;

        String type = msg.getType();
        if (type != null && type.equals("error")) {
            //fireError(ri.roomJID, msg.getErrorCode(), msg.getErrorText());
        }

        else {
            handleGroupchatMsg(msg, ri);
        }
    }

    // handles message to the room
    private void handleGroupchatMsg(Message msg, BSConfRoomInfo ri) {
        JID jid = msg.getFromAddress();
        //String str = BSPresenceBean.getJIDHashString(jid, true);
        //String nick = (String) ri.nicks.get(str);
        String nick = (String) ri.nicks.get(jid);

        String type = msg.getType();
        // if message to the room
        if (type != null && type.equals("groupchat")) {
            if (nick != null)
                fireGroupMessage(jid, nick, msg.getBody());
            else
                fireRoomMessage(jid, msg.getBody());
        }
        else {
            if (type == null || type.equals(""))
                type = new String("msg");
            // if message from room
            if (nick != null)
                firePrivateMessage(jid, nick, msg.getBody());
            // else private message
            else
                firePrivateMessage(jid, "[room]", msg.getBody());
        }
    }

    /** Tries to handle message as invitation */
    private void maybeHandleInvitation(Message msg) {
        String type = msg.getType();
        if (type != null && !type.equals("")) return;

        Enumeration exts = msg.Extensions();
        while (exts.hasMoreElements()) {
            Extension e = (Extension) exts.nextElement();
            if (e instanceof XConference) {
                JID roomJID = ((XConference) e).getAddress();
                fireInvitation(msg.getFromAddress(), roomJID, msg.getSubject(), msg.getBody());
            }
        }
    }

    /** Handles IQ result */
    private void handleIQResult(InfoQuery iq, BSConfRoomInfo ri) {
        String id = iq.getIdentifier();

        if (ri.state == BSConfRoomInfo.LOGGING2 &&
            ri.servedID != null && ri.servedID.equals(id)) {
                setLogged(iq, ri);
        }
        else if (ri.state == BSConfRoomInfo.CHANGING_NICK &&
            ri.servedID != null && ri.servedID.equals(id)) {
                //setNickChanged(iq, ri);
        }
        else {
            //fireError(ri.roomJID, "", "unexpected IQ result");
            //BSCore.logEvent(name, "warning: unexpected IQ result");
        }
    }

    /** Handles IQ set */
    private void handleIQSet(InfoQuery iq, BSConfRoomInfo ri) {
        Enumeration exts = iq.Extensions();

        // for all extensions
        while (exts.hasMoreElements()) {
            Extension e = (Extension) exts.nextElement();
            // if browse extension
            if (e instanceof IQBrowse) {
                IQBrowse b = (IQBrowse) e;
                String category = b.getCategory();
                // if item is user category
                if (category.equals("user"))
                    handleIQBrowseUser(b, ri);
                // else if item is conference category
                else if (category.equals("conference")) {
                    String extName = b.getName();
                    String type = b.getType();
                    fireRoomMessage(ri.roomJID, "room \"" + extName + "\" is of type \"" + type + "\"");
                    Enumeration enumeration = b.children();
                    // for all elements inside
                    while (enumeration.hasMoreElements()) {
                        BrowseItem bi = (BrowseItem) enumeration.nextElement();
                        category = bi.getCategory();
                        // if user
                        if (category.equals("user"))
                            handleIQBrowseUser(bi, ri);
                    } // for all BrowseItems
                } //if conference
            } //if IQBrowse
        } //for all extensions
    }

    /** Handles IQ browse user item */
    private void handleIQBrowseUser(BrowseItem b, BSConfRoomInfo ri) {
        String extName = b.getName();
        JID jid = b.getJID();
        String type = b.getType();
        //String hashJID = BSPresenceBean.getJIDHashString(jid, true);
        // if type == remove
        if (type != null && type.equals("remove")) {
            // removes the user
            //extName = (String) ri.nicks.get(hashJID);
            extName = (String) ri.nicks.get(jid);
            //ri.nicks.remove(hashJID);
            presenceBean.setPresence(jid, false, null, null, 0);
            //fireRoomMessage(ri.roomJID, extName + " left the room");
        }
        // else adds the user
        else {
            //ri.nicks.put(hashJID, extName);
            ri.nicks.put(jid, extName);
            presenceBean.setPresence(jid, true, null, null, 0);
            //fireRoomMessage(ri.roomJID, extName + " entered the room");
        }
    }

    /** Sets logged after receiving IQ result for creating/joining IQ set */
    private void setLogged(InfoQuery iq, BSConfRoomInfo ri) {
        Enumeration exts = iq.Extensions();

        while (exts.hasMoreElements()) {
            Extension e = (Extension) exts.nextElement();
            // if conference extension, sets information about the room
            if (e instanceof IQConf) {
                IQConf c = (IQConf) e;
                ri.setRoomName(c.getRoomName());
                ri.setMyJID(JID.fromString(c.getID()));
                fireSetMyJID(ri.roomJID, JID.fromString(c.getID()));
                fireRoomMessage(ri.roomJID, "logged into room \"" + c.getRoomName() + "\"");
                ri.setState(BSConfRoomInfo.LOGGED);
            }
        }
    }

    /** Sends invitation into given room to given JID */
    public boolean sendInvitation(JID toAddress, JID roomJID, String subject, String body) {
        if (toAddress == null || roomJID == null)
            return false;

        XConferenceBuilder confBuilder = new XConferenceBuilder();
        confBuilder.setAddress(roomJID);
        MessageBuilder msgBuilder = new MessageBuilder();
        msgBuilder.setToAddress(toAddress);
        if (body != null)
            msgBuilder.setBody(body);
        if (subject != null)
            msgBuilder.setSubject(subject);
        try {
            msgBuilder.addExtension(confBuilder.build());
            //msgBean.send((Message)msgBuilder.build());
            msgBean.getConnection().send(msgBuilder.build());
        } catch (InstantiationException e) {
            fireError(roomJID, "", "message builder failed");
            BSCore.logEvent(name, "error: message builder failed");
            return false;
        }
        return true;
    }

    /** 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).
     *
     * @param pe PacketEvent for the failed send
     */
    public void sendFailed(PacketEvent pe) {
    }

    /** called whenever a local client sends a packet, after the sending
     * is successful
     *
     * @param pe PacketEvent that has just been sent
     */
    public void sentPacket(PacketEvent pe) {
    }

    /** Returns users inside given room */
    public Enumeration getRoster(JID roomJID) {
        if (presenceBean == null) {
            return (new Vector()).elements();
        }

        //roomJID = JID.fromString(roomJID.toString().toLowerCase());
        return presenceBean.getAllPresences(roomJID);
    }

    /** Returns nick of given JID */
    public String getNick(JID jid) {
        String nick = null;
        //String str = BSPresenceBean.getJIDHashString(jid, false);
        JID key = jid.getSimpleJID();
        //BSConfRoomInfo ri = (BSConfRoomInfo) rooms.get(str.toLowerCase());

⌨️ 快捷键说明

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