refactor progress

This commit is contained in:
Hampus Kraft
2026-02-17 12:22:36 +00:00
parent cb31608523
commit d5abd1a7e4
8257 changed files with 1190207 additions and 761040 deletions

View File

@@ -26,13 +26,40 @@
find_session_by_ref/2
]).
-type session_id() :: binary().
-type status() :: online | offline | idle | dnd | invisible.
-type session_entry() :: #{
session_id := session_id(),
status := status(),
afk := boolean(),
mobile := boolean(),
pid := pid(),
mref := reference(),
socket_pid := pid() | undefined
}.
-type sessions() :: #{session_id() => session_entry()}.
-type state() :: #{sessions := sessions(), _ => _}.
-type connect_request() :: #{
session_id := session_id(),
status := status(),
afk => boolean(),
mobile => boolean(),
socket_pid => pid() | undefined
}.
-type update_request() :: #{
session_id := session_id(),
status := status(),
afk => boolean()
}.
-spec handle_session_connect(connect_request(), pid(), state()) ->
{reply, {ok, [map()]}, state()}.
handle_session_connect(Request, Pid, State) ->
#{session_id := SessionId, status := Status} = Request,
Afk = maps:get(afk, Request, false),
Mobile = maps:get(mobile, Request, false),
SocketPid = maps:get(socket_pid, Request, undefined),
Sessions = maps:get(sessions, State),
case maps:is_key(SessionId, Sessions) of
true ->
SessionsData = presence_status:collect_sessions_for_replace(Sessions),
@@ -50,16 +77,15 @@ handle_session_connect(Request, Pid, State) ->
},
NewSessions = maps:put(SessionId, SessionEntry, Sessions),
NewState = maps:put(sessions, NewSessions, State),
SessionsData = presence_status:collect_sessions_for_replace(NewSessions),
{reply, {ok, SessionsData}, NewState}
end.
-spec handle_presence_update(update_request(), state()) -> {noreply, state()}.
handle_presence_update(Request, State) ->
#{session_id := SessionId, status := Status} = Request,
Afk = maps:get(afk, Request, false),
Sessions = maps:get(sessions, State),
case maps:get(SessionId, Sessions, undefined) of
undefined ->
{noreply, State};
@@ -71,18 +97,20 @@ handle_presence_update(Request, State) ->
{noreply, NewState}
end.
-spec dispatch_sessions_replace(state()) -> ok.
dispatch_sessions_replace(State) ->
Sessions = maps:get(sessions, State),
SessionsData = presence_status:collect_sessions_for_replace(Sessions),
SessionPids = [maps:get(pid, S) || S <- maps:values(Sessions)],
lists:foreach(
fun(Pid) when is_pid(Pid) ->
gen_server:cast(Pid, {dispatch, sessions_replace, SessionsData})
end,
SessionPids
).
),
ok.
-spec notify_sessions_guild_join(integer(), state()) -> ok.
notify_sessions_guild_join(GuildId, State) ->
Sessions = maps:get(sessions, State),
SessionPids = [maps:get(pid, S) || S <- maps:values(Sessions)],
@@ -91,8 +119,10 @@ notify_sessions_guild_join(GuildId, State) ->
gen_server:cast(Pid, {guild_join, GuildId})
end,
SessionPids
).
),
ok.
-spec notify_sessions_guild_leave(integer(), state()) -> ok.
notify_sessions_guild_leave(GuildId, State) ->
Sessions = maps:get(sessions, State),
SessionPids = [maps:get(pid, S) || S <- maps:values(Sessions)],
@@ -101,8 +131,10 @@ notify_sessions_guild_leave(GuildId, State) ->
gen_server:cast(Pid, {guild_leave, GuildId})
end,
SessionPids
).
),
ok.
-spec find_session_by_ref(reference(), sessions()) -> {ok, session_id()} | not_found.
find_session_by_ref(Ref, Sessions) ->
maps:fold(
fun(SessionId, S, Acc) ->
@@ -114,3 +146,25 @@ find_session_by_ref(Ref, Sessions) ->
not_found,
Sessions
).
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
find_session_by_ref_found_test() ->
Ref = make_ref(),
Sessions = #{
<<"s1">> => #{session_id => <<"s1">>, mref => make_ref()},
<<"s2">> => #{session_id => <<"s2">>, mref => Ref}
},
?assertEqual({ok, <<"s2">>}, find_session_by_ref(Ref, Sessions)).
find_session_by_ref_not_found_test() ->
Ref = make_ref(),
Sessions = #{
<<"s1">> => #{session_id => <<"s1">>, mref => make_ref()}
},
?assertEqual(not_found, find_session_by_ref(Ref, Sessions)).
find_session_by_ref_empty_test() ->
?assertEqual(not_found, find_session_by_ref(make_ref(), #{})).
-endif.