📄 bsconfbean.java
字号:
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 + -