我有一个ejabberd服务器,想为它编写一个网络聊天客户端。我看过像Candy这样的东西,但是对于我想要做的事情,它们有点过头了。我只想要一些基本功能,如即时通讯,群聊和在线状态。
我使用strophejs-1.0.2的basic.html和basic.js示例文件作为我的基础。我已设法连接到我的jabber服务器,加入会议,“尝试发送消息”,离开会议,并向我发送即时消息。其中大部分都在发挥作用。
我遇到的问题是,当用户登录并加入会议时,它会尝试将消息发布到该组但是失败。
<message xmlns="jabber:client" from="test@conference.jabber.example.com" to="user@jabber.example.com/27311205821380711229538600" type="error">
<body>test2</body>
<error code="406" type="modify">
<not-acceptable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"></not-acceptable>
<text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">It is not allowed to send private messages to the conference</text>
</error>
</message>
如果我使用Pidgin登录会议,我可以在会议中看到用户。它旁边有一个图标,上面有一个圆点和一些圆圈。如果我右键单击用户,则表示用户状态为“脱机”。这很奇怪,因为用户在线。如果我查看ejabberd的管理控制台,我看到用户在线。我尝试在用户加入会议之前手动设置这样的状态:
connection.send($pres({type: "Available"}));
有了这个结果:
<presence xmlns="jabber:client" from="user@jabber.example.com/27311205821380711229538600" to="user@jabber.example.com/27311205821380711229538600" type="Available"></presence>
用户的状态仍为“离线”。
当它在线时它发送给我的即时通讯在Pidgin中是红色文字。普通消息看起来是蓝色我认为这是因为它认为用户处于离线状态。
我有点卡住了。我想知道是否有人可以帮助我或指出我正确的方向?我首先要弄清楚为什么这个用户看起来像是脱机而且似乎并没有修复它。
我一直在查看有关如何查询名册的文档。我也没有取得多大成功。我正在寻找一个非常基本的示例来显示哪些用户在线以及他们的状态,如果有更改,则回调更新。
有人能帮助我吗?
答案 0 :(得分:5)
设置您的初始状态:
connection.send($pres());
要检查用户的存在,请尝试使用“探测”:
var check = $pres({type: 'probe', to: 'friend@server.com'});
connection.send(check);
如果friend@server.com在线,则应返回以下内容:
<body xmlns="http://jabber.org/protocol/httpbind">
<presence xmlns="jabber:client" from="you@server.com/4edf83f2" to="friend@server.com/4edf83f2"></presence>
</body>
答案 1 :(得分:0)
+1。您可以使用ping插件并执行乒乓发送 - 响应以查看用户是否在线。看看名册插件也是如此。至于您在Pidgin和Web客户端之间的问题,我在任何桌面客户端和我的Web界面之间都有相同的问题,但是,我可以在2之间聊天。