Transfer ownership of client socket in session_server:init/1
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user