This commit is contained in:
anlicheng 2025-04-22 15:45:30 +08:00
parent 21e1f1f9cf
commit 332e3f8dc0
2 changed files with 13 additions and 67 deletions

View File

@ -22,10 +22,7 @@
-define(SERVER, ?MODULE). -define(SERVER, ?MODULE).
-record(state, { -record(state, {
host :: string(), transport_pid :: undefined | pid()
port :: integer(),
socket :: undefined | ssl:sslsocket(),
packet_id = 1
}). }).
%%%=================================================================== %%%===================================================================
@ -48,13 +45,9 @@ start_link() ->
{ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} |
{stop, Reason :: term()} | ignore). {stop, Reason :: term()} | ignore).
init([]) -> init([]) ->
{ok, Props} = application:get_env(efka, tls_server), erlang:process_flag(trap_exit, true),
Host = proplists:get_value(host, Props), {ok, TransportPid} = efka_transport:start_link(self()),
Port = proplists:get_value(port, Props), {ok, #state{transport_pid = TransportPid}}.
erlang:start_timer(0, self(), create_connection),
{ok, #state{host = Host, port = Port}}.
%% @private %% @private
%% @doc Handling call messages %% @doc Handling call messages

View File

@ -15,7 +15,7 @@
%% API %% API
-export([start_link/1]). -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 %% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -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) -> auth_request(Pid, Timeout) when is_pid(Pid), is_integer(Timeout) ->
gen_server:call(Pid, {auth_request, Timeout}). gen_server:call(Pid, {auth_request, Timeout}).
data(Pid, Data = #data{}) when is_pid(Pid) -> send(Pid, Method, Packet) when is_pid(Pid), is_integer(Method), is_binary(Packet) ->
gen_server:cast(Pid, {data, Data}). gen_server:cast(Pid, {send, Method, Packet}).
ping(Pid, Ping) when is_pid(Pid) -> response(Pid, PacketId, Response) when is_pid(Pid), is_integer(PacketId) ->
gen_server:cast(Pid, {ping, Ping}). gen_server:cast(Pid, {response, PacketId, Response}).
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}).
%% @doc Spawns the server and registers the local name (unique) %% @doc Spawns the server and registers the local name (unique)
-spec(start_link(ParentPid :: pid()) -> -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{}} |
{noreply, NewState :: #state{}, timeout() | hibernate} | {noreply, NewState :: #state{}, timeout() | hibernate} |
{stop, Reason :: term(), NewState :: #state{}}). {stop, Reason :: term(), NewState :: #state{}}).
handle_cast({data, Data}, State = #state{socket = Socket}) -> handle_cast({send, Method, Packet}, State = #state{socket = Socket}) ->
ok = ssl:send(Socket, <<?PACKET_REQUEST, 0:32, ?METHOD_DATA, Data/binary>>), ok = ssl:send(Socket, <<?PACKET_REQUEST, 0:32, Method, Packet/binary>>),
{noreply, State}; {noreply, State};
handle_cast({ping, Ping}, State = #state{socket = Socket}) -> handle_cast({response, PacketId, Response}, State = #state{socket = Socket}) ->
ok = ssl:send(Socket, <<?PACKET_REQUEST, 0:32, ?METHOD_PING, Ping/binary>>), ok = ssl:send(Socket, <<?PACKET_PUBLISH_RESPONSE, PacketId:32, Response/binary>>),
{noreply, State};
handle_cast({inform, Inform}, State = #state{socket = Socket}) ->
ok = ssl:send(Socket, <<?PACKET_REQUEST, 0:32, ?METHOD_INFORM, Inform/binary>>),
{noreply, State};
handle_cast({feedback_step, FeedbackStep}, State = #state{socket = Socket}) ->
ok = ssl:send(Socket, <<?PACKET_REQUEST, 0:32, ?METHOD_FEEDBACK_STEP, FeedbackStep/binary>>),
{noreply, State};
handle_cast({feedback_result, FeedbackResult}, State = #state{socket = Socket}) ->
ok = ssl:send(Socket, <<?PACKET_REQUEST, 0:32, ?METHOD_FEEDBACK_RESULT, FeedbackResult/binary>>),
{noreply, State};
handle_cast({event, Event}, State = #state{socket = Socket}) ->
ok = ssl:send(Socket, <<?PACKET_REQUEST, 0:32, ?METHOD_EVENT, Event/binary>>),
{noreply, State};
handle_cast({ai_event, AIEvent}, State = #state{socket = Socket}) ->
ok = ssl:send(Socket, <<?PACKET_REQUEST, 0:32, ?METHOD_AI_EVENT, AIEvent/binary>>),
{noreply, State};
handle_cast({data, Data}, State = #state{socket = Socket}) ->
ok = ssl:send(Socket, <<?PACKET_REQUEST, 0:32, ?METHOD_DATA, Data/binary>>),
{noreply, State};
%% todo
handle_cast({response, Response}, State = #state{socket = Socket}) ->
ok = ssl:send(Socket, <<?PACKET_PUBLISH_RESPONSE, 0:32, Response/binary>>),
{noreply, State}. {noreply, State}.
%% @private %% @private