【发布时间】:2012-04-22 16:05:41
【问题描述】:
我目前正在尝试制作一个基于 Strophe 的 javascript 脚本来获取 OpenFire 服务器中可用用户的列表(需要实时刷新)。我不在乎我是否必须创建一个组、房间或其他任何名称(无论如何,服务器将只为一小部分用户运行,每个人都相互连接),但我希望能够制作服务器给出这样的清单。 我怎样才能做到这一点?我读过我需要使用 muc 扩展,但我似乎无法在任何地方找到它......
【问题讨论】:
我目前正在尝试制作一个基于 Strophe 的 javascript 脚本来获取 OpenFire 服务器中可用用户的列表(需要实时刷新)。我不在乎我是否必须创建一个组、房间或其他任何名称(无论如何,服务器将只为一小部分用户运行,每个人都相互连接),但我希望能够制作服务器给出这样的清单。 我怎样才能做到这一点?我读过我需要使用 muc 扩展,但我似乎无法在任何地方找到它......
【问题讨论】:
问题解决了!我必须将与我一起工作的用户添加到一个组中,并且每次用户离开或进入房间时,OpenFire 都会通知房间的其他用户,并且大多数情况下都会在 body 标签中包含一个存在节。这使得 Strophe 不能很好地识别那些存在节,所以我不得不从 Strophe 连接中覆盖 xmlInput 函数,以获取我从服务器获得的每一个 xml 节。
conn.xmlInput = onXmlInput;
function onXmlInput(data) {
Strophe.forEachChild(data, "presence", function(child) {
var from = child.getAttribute('from');
from = from.substring(0, from.indexOf('@'));
//'type' will contain "unavailable" when offline and no attribute 'type' when online
if (!child.hasAttribute('type')) {
addUser(from);
} else {
deleteUser(from);
}
});
}
【讨论】:
addUser 和 deleteUser 是您在新用户加入或从服务器断开连接时执行的自定义方法。就我而言,我在已连接用户列表中添加和删除了它们。这是我的addUser 方法:$("select#recepients").append("<option id="+from+">"+from+"</option>")