erlang - ejabberd 和自定义名册

标签 erlang xmpp ejabberd rostering

我已经有了一个非常简单的网站,并且有相当多的流量。

所以我决定添加一个网络聊天功能,让我的用户在他们的友谊中聊天。 我决定使用ejabberd来完成这个任务。 问题是:我已经有2个表(users[uid,nickname,pass]和relationships[rid,uid,uid2]。 我如何告诉 ejabber 使用这些表中的数据? 我可以找到任何模块(例如授权模块)来编辑和适应我的目的吗?

编辑

如果我不想使用 rosterusers 表,而是直接使用我的 elationships[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.

然后呢?

最佳答案

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

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

如果您需要关系的更改立即对连接的用户可见(而不是在下次登录时),您将需要在 ejabberd 端提供一个 API,以便在每次更改时从您的 Web 应用程序调用,以便能够“推送"向已连接的用户更新名单信息。

关于erlang - ejabberd 和自定义名册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572151/

相关文章:

erlang - Erlang中的begin...end是做什么用的?

android - 未使用smack 4.1.1授权SASLException

sed - openshift 上的 ejabberd - 与节点的 RPC 连接失败

objective-c - ejabberd 自动允许订阅

multithreading - 多核处理器上的多线程、并发和并行性

erlang - 将 map 转换为erlang中的列表的函数

programming-languages - 为什么使用 Erlang 决定 "against"?

java - 无法将简单的 Java Smack 示例连接到 Google Talk

iphone - 我如何在 iPhone 中使用 xmppstream 对象验证 Facebook 访问 token

ejabberd - 将 contrib 模块安装到 ejabberd 时出错