refactor: Move deliver and persist out of server context
This commit is contained in:
parent
1c274b15d2
commit
31cb1179af
|
@ -181,14 +181,23 @@ persist(Msg) ->
|
||||||
case match_routes(emqx_message:topic(Msg)) of
|
case match_routes(emqx_message:topic(Msg)) of
|
||||||
[] -> ok;
|
[] -> ok;
|
||||||
Routes ->
|
Routes ->
|
||||||
|
%% TODO: This should store in external backend
|
||||||
ekka_mnesia:dirty_write(?MSG_TAB, Msg),
|
ekka_mnesia:dirty_write(?MSG_TAB, Msg),
|
||||||
Fun = fun(Route) -> cast(pick(Route), {persist, Route, Msg}) end,
|
MsgId = emqx_message:id(Msg),
|
||||||
|
Fun = fun(#route{dest = SessionID}) ->
|
||||||
|
Key = {SessionID, MsgId, ?UNDELIVERED},
|
||||||
|
ekka_mnesia:dirty_write(?SESS_MSG_TAB, #session_msg{ key = Key })
|
||||||
|
end,
|
||||||
lists:foreach(Fun, Routes)
|
lists:foreach(Fun, Routes)
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
delivered(SessionID, MsgIds) ->
|
delivered(SessionID, MsgIDs) ->
|
||||||
cast(pick(SessionID), {delivered, SessionID, MsgIds}).
|
Fun = fun(MsgID) ->
|
||||||
|
Key = {SessionID, MsgID, ?DELIVERED},
|
||||||
|
ekka_mnesia:dirty_write(?SESS_MSG_TAB, #session_msg{ key = Key })
|
||||||
|
end,
|
||||||
|
lists:foreach(Fun, MsgIDs),
|
||||||
|
|
||||||
pending(SessionID) ->
|
pending(SessionID) ->
|
||||||
call(pick(SessionID), {pending, SessionID}).
|
call(pick(SessionID), {pending, SessionID}).
|
||||||
|
@ -218,10 +227,6 @@ handle_call(Req, _From, State) ->
|
||||||
?LOG(error, "Unexpected call: ~p", [Req]),
|
?LOG(error, "Unexpected call: ~p", [Req]),
|
||||||
{reply, ignored, State}.
|
{reply, ignored, State}.
|
||||||
|
|
||||||
handle_cast({persist, #route{dest = SessionID}, Msg}, State) ->
|
|
||||||
Key = {SessionID, emqx_message:id(Msg), ?UNDELIVERED},
|
|
||||||
ekka_mnesia:dirty_write(?SESS_MSG_TAB, #session_msg{ key = Key }),
|
|
||||||
{noreply, State};
|
|
||||||
handle_cast({delivered, SessionID, MsgIDs}, State) ->
|
handle_cast({delivered, SessionID, MsgIDs}, State) ->
|
||||||
Fun = fun(MsgID) ->
|
Fun = fun(MsgID) ->
|
||||||
Key = {SessionID, MsgID, ?DELIVERED},
|
Key = {SessionID, MsgID, ?DELIVERED},
|
||||||
|
|
Loading…
Reference in New Issue