ejabberd和定制名册

时间:2012-09-24 20:08:31

标签: erlang xmpp ejabberd rostering

我已经有一个非常简单的网站,有很多交通。

所以我决定添加一个网络聊天,让我的用户在他们的友谊中聊天。 我已决定使用ejabberd来完成此任务。 问题是:我已经有2个表(用户[uid,昵称,密码]和关系[rid,uid,uid2]。 如何告诉ejabber处理这些表中的数据? 我可以找到任何模块,比如auth的模块,来编辑和适应我的目的吗?

修改

如果我不想使用rosterusers表,但直接使用我的关系[rid,uid,uid2],对于我应该改变什么有任何建议吗?

1)首先,在odbc_queries里面,函数get_roster里面的查询到

"select uid, uid2 from relationships "
       "where uid ='", Username, "'"]).

2)mod_roster_dbc里面的“元组列的检查器”函数get_roster

3)然后将函数raw_to_record改为

raw_to_record(LServer, {Uid,Uid2}) ->
case  jlib:make_jid(Uid2, LServer, "") of
error ->
    error;
JID ->
    LJID = jlib:jid_tolower(JID),
    Subscription = both,
    Ask = both,

      end,
    #roster{usj = {Uid, LServer, LJID},
        us = {Uid, LServer},
        jid = LJID,
        name = "",
        subscription = Subscription,
        ask = Ask,
        askmessage = ""}
end.

然后?

2 个答案:

答案 0 :(得分:1)

对于联系人列表,您需要定义自己的名册模块。

您可以使用mod_roster或mod_roster_odbc作为起点。请注意,这些模块相当复杂,并提供对名单,订阅等的读/写访问。在您的情况下,您可能只需要读访问权(因为您的网站管理好友关系),因此实现将更加简单(对于例如,您需要处理“获取”IQ请求,但无需处理“设置”IQ请求。

如果您需要更改关系以便连接用户立即可见(而不是下次登录),则需要在ejabberd端提供一个API,以便在每次更改时从您的webapp调用,以便能够“推送” “更新的名册信息给连接的用户。

答案 1 :(得分:0)

看看ejabberd_auth_odbc。它在ejabberd_auth后面工作,所以如果你的表没有完全按照xmpp规范编写自定义auth模块就很容易了。