Ejabberd и пользовательский список

У меня уже есть очень простой сайт с довольно хорошим трафиком.

Поэтому я решил добавить веб-чат, чтобы мои пользователи общались в дружбе. Я решил использовать ejabberd для выполнения этой задачи. Проблема в том, что у меня уже есть 2 таблицы ( users[uid, nickname, pass] и взаимосвязи [rid, uid, uid2]. Как я могу сказать ejabber работать с данными внутри этих таблиц? Могу ли я найти какой-нибудь модуль, как аутентичный, редактировать и адаптировать для моих целей?

РЕДАКТИРОВАТЬ

Если я не хочу использовать таблицу 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 ответа

Решение

Для списков контактов вам нужно определить свой собственный модуль реестра.

Вы можете использовать mod_roster или mod_roster_odbc в качестве отправной точки. Обратите внимание, что эти модули довольно сложны и предоставляют доступ на чтение / запись к спискам, подпискам и т. Д. В вашем случае вам, вероятно, нужен только доступ на чтение (так как отношения друзей управляются вашим веб-сайтом), поэтому реализация будет намного проще (для Например, вам нужно будет обработать IQ-запрос "get", но ничего не поделать с "set" IQ-запросами).

Если вам нужно, чтобы изменения в отношениях были сразу же видны подключенным пользователям (а не при следующем входе в систему), вам потребуется предоставить API на стороне ejabberd, который будет вызываться из вашего веб-приложения при каждом изменении, чтобы иметь возможность "выдвигать" обновленные данные. информация реестра для подключенных пользователей.

Посмотрите на ejabberd_auth_odbc. Он работает за ejabberd_auth, поэтому, если ваши таблицы не соответствуют спецификации xmpp, будет легко написать собственный модуль auth.

Другие вопросы по тегам