Transfer ownership of client socket in session_server:init/1

This commit is contained in:
2025-03-02 16:49:42 +00:00
parent 8a7032309f
commit 7c26a9278f
2 changed files with 11 additions and 13 deletions

View File

@@ -12,6 +12,7 @@ start_link(Socket) ->
gen_server:start_link(?MODULE, Socket, []).
init(Socket) ->
ok = ssl:controlling_process(Socket, self()),
ok = ssl:setopts(Socket, [{active, true}]),
process_flag(trap_exit, true),
{ok, #{socket => Socket, transactions => #{}}}.
@@ -38,9 +39,7 @@ handle_info({'EXIT', Pid, Reason},
TransactionId = maps:get(Pid, Transactions),
Response = case Reason of
{response, Value} -> Value;
_ ->
io:format("Error handling request: ~p~n", [Reason]),
{error, serverError}
_ -> {error, serverError}
end,
send(Socket, TransactionId, Response),
{noreply, State#{transactions := maps:remove(Pid, Transactions)}};
@@ -59,25 +58,25 @@ code_change(_OldVsn, State, _Extra) ->
handle_request(Request) ->
timer:kill_after(500),
exit(map_request(Request)).
exit({response, map_request(Request)}).
map_request({ping, 'NULL'}) ->
{response, {ack, 'NULL'}};
{ack, 'NULL'};
map_request({listActivities, 'NULL'}) ->
{activities, Activities} = subject_router:get_activities(),
SortedActivities = lists:reverse(lists:keysort(3, Activities)),
{response, {activities,
[{'Activity', Subject, Type, round(Priority * 100)}
|| {Subject, Type, Priority} <- SortedActivities]}};
{activities,
[{'Activity', Subject, Type, round(Priority * 100)}
|| {Subject, Type, Priority} <- SortedActivities]};
map_request({logSession, {'Session', Subject, Type, Timestamp, Minutes}}) ->
Session = {unicode:characters_to_list(Subject),
Type, Timestamp, Minutes},
case subject_router:log_session(Session) of
ok -> {response, {ack, 'NULL'}};
{error, _Error} -> {response, {error, invalidArguments}}
ok -> {ack, 'NULL'};
{error, _Error} -> {error, invalidArguments}
end;
map_request(_) ->
{response, {error, invalidArguments}}.
{error, invalidArguments}.
send(Socket, TransactionId, Response) ->
{ok, Encoded} = 'StudySystemProtocol':encode(

View File

@@ -41,8 +41,7 @@ handle_info(accept, State = #state{socket = Socket}) ->
handle_info({handshake, TlsSocket}, State) ->
case ssl:handshake(TlsSocket, 5000) of
{ok, ClientSocket} ->
{ok, Pid} = session_sup:start_session(ClientSocket),
ok = ssl:controlling_process(ClientSocket, Pid);
{ok, _Pid} = session_sup:start_session(ClientSocket);
{error, _Reason} ->
ok
end,