Use ejabberd_cluster:send() in SM/C2S
This commit is contained in:
parent
ab2a90181c
commit
e4a4839880
|
@ -146,10 +146,9 @@ send_error(#{lserver := LServer} = State, Pkt, Err) ->
|
||||||
{Pkt1, State1} -> xmpp_stream_in:send_error(State1, Pkt1, Err)
|
{Pkt1, State1} -> xmpp_stream_in:send_error(State1, Pkt1, Err)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec route(pid(), term()) -> ok.
|
-spec route(pid(), term()) -> boolean().
|
||||||
route(Pid, Term) ->
|
route(Pid, Term) ->
|
||||||
Pid ! Term,
|
ejabberd_cluster:send(Pid, Term).
|
||||||
ok.
|
|
||||||
|
|
||||||
-spec set_timeout(state(), timeout()) -> state().
|
-spec set_timeout(state(), timeout()) -> state().
|
||||||
set_timeout(State, Timeout) ->
|
set_timeout(State, Timeout) ->
|
||||||
|
|
|
@ -113,21 +113,28 @@ get_node_by_id(ID) ->
|
||||||
Mod = get_mod(),
|
Mod = get_mod(),
|
||||||
Mod:get_node_by_id(ID).
|
Mod:get_node_by_id(ID).
|
||||||
|
|
||||||
|
%% Note that false positive returns are possible, while false negatives are not.
|
||||||
|
%% In other words: positive return value (i.e. 'true') doesn't guarantee
|
||||||
|
%% successful delivery, while negative return value ('false') means
|
||||||
|
%% the delivery has definitely failed.
|
||||||
-spec send(dst(), term()) -> boolean().
|
-spec send(dst(), term()) -> boolean().
|
||||||
send(Dst, Msg) ->
|
send({Name, Node}, Msg) when Node == node() ->
|
||||||
IsLocal = case Dst of
|
send(Name, Msg);
|
||||||
{_, Node} -> Node == node();
|
send(undefined, _Msg) ->
|
||||||
Pid when is_pid(Pid) -> node(Pid) == node();
|
false;
|
||||||
Name when is_atom(Name) -> true;
|
send(Name, Msg) when is_atom(Name) ->
|
||||||
_ -> false
|
send(whereis(Name), Msg);
|
||||||
end,
|
send(Pid, Msg) when is_pid(Pid) andalso node(Pid) == node() ->
|
||||||
if IsLocal ->
|
case erlang:is_process_alive(Pid) of
|
||||||
erlang:send(Dst, Msg),
|
true ->
|
||||||
|
erlang:send(Pid, Msg),
|
||||||
true;
|
true;
|
||||||
true ->
|
false ->
|
||||||
Mod = get_mod(),
|
false
|
||||||
Mod:send(Dst, Msg)
|
end;
|
||||||
end.
|
send(Dst, Msg) ->
|
||||||
|
Mod = get_mod(),
|
||||||
|
Mod:send(Dst, Msg).
|
||||||
|
|
||||||
-spec wait_for_sync(timeout()) -> ok | {error, any()}.
|
-spec wait_for_sync(timeout()) -> ok | {error, any()}.
|
||||||
wait_for_sync(Timeout) ->
|
wait_for_sync(Timeout) ->
|
||||||
|
|
Loading…
Reference in New Issue