diff --git a/apps/efka/src/efka_agent.erl b/apps/efka/src/efka_agent.erl index b3ae0bb..de66692 100644 --- a/apps/efka/src/efka_agent.erl +++ b/apps/efka/src/efka_agent.erl @@ -22,10 +22,7 @@ -define(SERVER, ?MODULE). -record(state, { - host :: string(), - port :: integer(), - socket :: undefined | ssl:sslsocket(), - packet_id = 1 + transport_pid :: undefined | pid() }). %%%=================================================================== @@ -48,13 +45,9 @@ start_link() -> {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | {stop, Reason :: term()} | ignore). init([]) -> - {ok, Props} = application:get_env(efka, tls_server), - Host = proplists:get_value(host, Props), - Port = proplists:get_value(port, Props), - - erlang:start_timer(0, self(), create_connection), - - {ok, #state{host = Host, port = Port}}. + erlang:process_flag(trap_exit, true), + {ok, TransportPid} = efka_transport:start_link(self()), + {ok, #state{transport_pid = TransportPid}}. %% @private %% @doc Handling call messages diff --git a/apps/efka/src/efka_transport.erl b/apps/efka/src/efka_transport.erl index 35b983e..2756bad 100644 --- a/apps/efka/src/efka_transport.erl +++ b/apps/efka/src/efka_transport.erl @@ -15,7 +15,7 @@ %% API -export([start_link/1]). --export([auth_request/2, data/2, ping/2, inform/2, feedback_step/2, feedback_result/2, event/2, ai_event/2, response/2]). +-export([auth_request/2, send/3, response/3]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). @@ -37,29 +37,11 @@ auth_request(Pid, Timeout) when is_pid(Pid), is_integer(Timeout) -> gen_server:call(Pid, {auth_request, Timeout}). -data(Pid, Data = #data{}) when is_pid(Pid) -> - gen_server:cast(Pid, {data, Data}). +send(Pid, Method, Packet) when is_pid(Pid), is_integer(Method), is_binary(Packet) -> + gen_server:cast(Pid, {send, Method, Packet}). -ping(Pid, Ping) when is_pid(Pid) -> - gen_server:cast(Pid, {ping, Ping}). - -inform(Pid, Inform) when is_pid(Pid) -> - gen_server:cast(Pid, {inform, Inform}). - -feedback_step(Pid, FeedbackStep) when is_pid(Pid) -> - gen_server:cast(Pid, {feedback_step, FeedbackStep}). - -feedback_result(Pid, FeedbackResult) when is_pid(Pid) -> - gen_server:cast(Pid, {feedback_result, FeedbackResult}). - -event(Pid, Event) when is_pid(Pid) -> - gen_server:cast(Pid, {event, Event}). - -ai_event(Pid, AIEvent) when is_pid(Pid) -> - gen_server:cast(Pid, {ai_event, AIEvent}). - -response(Pid, Response) when is_pid(Pid) -> - gen_server:cast(Pid, {response, Response}). +response(Pid, PacketId, Response) when is_pid(Pid), is_integer(PacketId) -> + gen_server:cast(Pid, {response, PacketId, Response}). %% @doc Spawns the server and registers the local name (unique) -spec(start_link(ParentPid :: pid()) -> @@ -136,41 +118,12 @@ handle_call({auth_request, Timeout}, _From, State = #state{socket = Socket, pack {noreply, NewState :: #state{}} | {noreply, NewState :: #state{}, timeout() | hibernate} | {stop, Reason :: term(), NewState :: #state{}}). -handle_cast({data, Data}, State = #state{socket = Socket}) -> - ok = ssl:send(Socket, <>), +handle_cast({send, Method, Packet}, State = #state{socket = Socket}) -> + ok = ssl:send(Socket, <>), {noreply, State}; -handle_cast({ping, Ping}, State = #state{socket = Socket}) -> - ok = ssl:send(Socket, <>), - {noreply, State}; - -handle_cast({inform, Inform}, State = #state{socket = Socket}) -> - ok = ssl:send(Socket, <>), - {noreply, State}; - -handle_cast({feedback_step, FeedbackStep}, State = #state{socket = Socket}) -> - ok = ssl:send(Socket, <>), - {noreply, State}; - -handle_cast({feedback_result, FeedbackResult}, State = #state{socket = Socket}) -> - ok = ssl:send(Socket, <>), - {noreply, State}; - -handle_cast({event, Event}, State = #state{socket = Socket}) -> - ok = ssl:send(Socket, <>), - {noreply, State}; - -handle_cast({ai_event, AIEvent}, State = #state{socket = Socket}) -> - ok = ssl:send(Socket, <>), - {noreply, State}; - -handle_cast({data, Data}, State = #state{socket = Socket}) -> - ok = ssl:send(Socket, <>), - {noreply, State}; - -%% todo -handle_cast({response, Response}, State = #state{socket = Socket}) -> - ok = ssl:send(Socket, <>), +handle_cast({response, PacketId, Response}, State = #state{socket = Socket}) -> + ok = ssl:send(Socket, <>), {noreply, State}. %% @private