Как я могу переопределить функцию модуля get_user_roster (Acc, US) модуля EJabberd? - PullRequest
4 голосов
/ 21 мая 2011

Я хочу иметь собственный механизм реестра Ejabberd, и во время тестирования я пытаюсь установить произвольные данные для списка друзей данного пользователя.

Я заменил содержимое функции get_user_roster в файле mod_roster.erl нажестко закодированный элемент, но он все еще не отображается в клиенте.Я знаю, что метод работает и нет ошибок.

Есть ли что-то еще, что мне нужно переопределить?или мой код неверен?Любое понимание будет оценено.

Мой код показан ниже:

get_user_roster(Acc, US) ->
    ?INFO_MSG("Mod Roster get_user_roster ~p XX ~p XX ~p XX ~p",[Acc, US, roster, #roster.us]),
    #roster{us = US, jid = "test#localhost", name = "Test Name", subscription = "both", ask = "none", askmessage = "ASk Message"},
    case catch mnesia:dirty_index_read(roster, US, #roster.us) of
    Items when is_list(Items) ->
        ?INFO_MSG("Mod Roster get_user_roster items ~p",[Items]),
        FItems = lists:filter(fun(#roster{subscription = none, ask = in}) -> false; (_) -> true end, Items),
        ?INFO_MSG("Mod Roster get_user_roster fitems ~p",[FItems]),
        FItems ++ Acc;
    _ ->
        ?INFO_MSG("No Items",[]),
        Acc
    end.

1 Ответ

1 голос
/ 25 мая 2011

Найдите {mod_roster, []} в файле ejabberd.cfg и замените mod_roster вашим модулем.

И нам нужно переопределить следующие методы, по крайней мере

-export([start/2, stop/1,
 process_iq/3,
 process_local_iq/3,
 get_user_roster/2,
 item_to_xml/1,
 get_versioning_feature/2,
 roster_versioning_enabled/1,
 roster_version/2]).
...