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.