2013-10-02 17 views
1

我有一个ejabberd服务器,并希望为它写一个Web聊天客户端。我已经看过像Candy这样的东西,但是他们对我想要做的事情有点过头了。我只想要一些基本功能,如即时消息,群聊和在线状态。存在问题使用ejabberd,strophe.js,strophe.muc.js和strophe.roster.js

我使用了strophejs-1.0.2的basic.html和basic.js示例文件作为我的基础。我设法连接到我的jabber服务器,加入会议,“尝试发送信息”,离开会议,并发送即时消息给我。大部分工作。

我遇到的问题是当用户登录并加入会议时,它会尝试向该组发送消息但失败。

<message xmlns="jabber:client" from="[email protected]" to="[email protected]/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="[email protected]/27311205821380711229538600" to="[email protected]/27311205821380711229538600" type="Available"></presence> 

仍然是用户有一个状态为脱机。

它在线发送给我的IM在Pidgin中以红色文本显示。普通消息看起来很蓝。我认为这是因为它认为用户是离线的。

我有点卡住了。我想知道是否有人可以帮助我,或者指引我走向正确的方向吗?我首先想弄清楚为什么这个用户看起来不在线下,而且看起来并没有解决问题。

我一直在寻找关于如何查询花名册的文档。我也没有取得太多的成功。我正在寻找一个非常基本的示例,以显示哪些用户在线以及他们的状态,并在有更改时回拨更新。

有人可以帮我吗?

回答

5

要设置初始存在:

connection.send($pres()); 

要检查用户的存在,尝试使用 “探针”:

var check = $pres({type: 'probe', to: '[email protected]'});   
connection.send(check); 

如果[email protected]在线,它应该返回是这样的:

<body xmlns="http://jabber.org/protocol/httpbind"> 
    <presence xmlns="jabber:client" from="[email protected]/4edf83f2" to="[email protected]/4edf83f2"></presence> 
</body> 
+0

之间聊天? –

0

+1设置存在。您可以使用ping插件并执行ping-pong发送响应以查看用户是否在线。请看一下名册插件。至于你之间Pidgin和网络客户端之间的问题,我有任何桌面客户端和我的网络界面显示可用相同的问题,但是,我可以在朋友将收到的方法之间的2.

+0

嗨,所以我可以使用ping插件来检查任何用户,如果他们连接以及? – John

+0

如果用户在线,ping将以“pong”响应,然后您可以使用乒乓球上的cb函数来发起聊天或您计划用“pong”执行的任何操作。 –

+0

谢谢!在线您是指在线状态,还是连接已连接?(如果某人已连接,但状态设置为请勿打扰,或离线?) – John