fix efka_client
This commit is contained in:
parent
4bc88e5022
commit
9bdf5fcac2
@ -1,32 +0,0 @@
|
|||||||
%%%-------------------------------------------------------------------
|
|
||||||
%%% @author anlicheng
|
|
||||||
%%% @copyright (C) 2025, <COMPANY>
|
|
||||||
%%% @doc
|
|
||||||
%%% 扩展部分, 1: 支持基于topic的pub/sub机制; 2. 基于target的单点通讯和广播
|
|
||||||
%%% @end
|
|
||||||
%%% Created : 21. 4月 2025 17:28
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
-author("anlicheng").
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
%%%% 二级分类定义
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
|
|
||||||
%% 主机端上报数据类型标识
|
|
||||||
-define(MESSAGE_AUTH_REQUEST, 16#01).
|
|
||||||
-define(MESSAGE_AUTH_REPLY, 16#02).
|
|
||||||
|
|
||||||
-define(MESSAGE_COMMAND, 16#03).
|
|
||||||
-define(MESSAGE_PUB, 16#05).
|
|
||||||
|
|
||||||
-define(MESSAGE_DATA, 16#06).
|
|
||||||
|
|
||||||
%% efka主动上报的event-stream流, 单向消息,主要是: docker-create的实时处理逻辑上报
|
|
||||||
-define(MESSAGE_EVENT_STREAM, 16#08).
|
|
||||||
|
|
||||||
-define(MESSAGE_JSONRPC_REQUEST, 16#F0).
|
|
||||||
-define(MESSAGE_JSONRPC_REPLY, 16#F1).
|
|
||||||
|
|
||||||
%%%% 命令类型子分类, 不需要返回值
|
|
||||||
%% 授权
|
|
||||||
-define(COMMAND_AUTH, 16#08).
|
|
||||||
@ -8,7 +8,7 @@
|
|||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
-module(efka_client).
|
-module(efka_client).
|
||||||
-author("anlicheng").
|
-author("anlicheng").
|
||||||
-include("message.hrl").
|
-include("protocol.hrl").
|
||||||
-include("message_pb.hrl").
|
-include("message_pb.hrl").
|
||||||
-include("efka_tables.hrl").
|
-include("efka_tables.hrl").
|
||||||
|
|
||||||
@ -118,6 +118,27 @@ handle_event(info, {timeout, _, create_transport}, ?STATE_DENIED, State) ->
|
|||||||
handle_event(info, {timeout, _, create_transport}, _, State) ->
|
handle_event(info, {timeout, _, create_transport}, _, State) ->
|
||||||
{keep_state, State};
|
{keep_state, State};
|
||||||
|
|
||||||
|
handle_event(state_timeout, auth_timeout, ?STATE_AUTH, State = #state{socket = Socket}) ->
|
||||||
|
logger:debug("[efka_client] auth request timeout"),
|
||||||
|
disconnect(Socket),
|
||||||
|
schedule_reconnect(),
|
||||||
|
{next_state, ?STATE_DENIED, State#state{socket = undefined}};
|
||||||
|
|
||||||
|
%% 将缓存中的数据推送到服务器端
|
||||||
|
handle_event(info, flush_cache, ?STATE_ACTIVATED, State = #state{socket = Socket}) ->
|
||||||
|
case cache_model:fetch_next() of
|
||||||
|
{ok, {Id, Packet}} ->
|
||||||
|
send_packet(Socket, Packet),
|
||||||
|
cache_model:delete(Id),
|
||||||
|
{keep_state, State, [{next_event, info, flush_cache}]};
|
||||||
|
error ->
|
||||||
|
{keep_state, State}
|
||||||
|
end;
|
||||||
|
handle_event(info, flush_cache, _, State) ->
|
||||||
|
{keep_state, State};
|
||||||
|
|
||||||
|
%% 处理收到的ssl消息
|
||||||
|
|
||||||
handle_event(info, {ssl, Socket, PacketBin}, ?STATE_AUTH, State = #state{socket = Socket}) ->
|
handle_event(info, {ssl, Socket, PacketBin}, ?STATE_AUTH, State = #state{socket = Socket}) ->
|
||||||
#'ResponseFrame'{packet_id = 1, body = {auth_reply, #'AuthReply'{code = Code, payload = Message}}} =
|
#'ResponseFrame'{packet_id = 1, body = {auth_reply, #'AuthReply'{code = Code, payload = Message}}} =
|
||||||
message_pb:decode_msg(PacketBin, 'ResponseFrame'),
|
message_pb:decode_msg(PacketBin, 'ResponseFrame'),
|
||||||
@ -140,25 +161,6 @@ handle_event(info, {ssl, Socket, PacketBin}, ?STATE_AUTH, State = #state{socket
|
|||||||
{next_state, ?STATE_DENIED, State#state{socket = undefined}}
|
{next_state, ?STATE_DENIED, State#state{socket = undefined}}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
handle_event(state_timeout, auth_timeout, ?STATE_AUTH, State = #state{socket = Socket}) ->
|
|
||||||
logger:debug("[efka_client] auth request timeout"),
|
|
||||||
disconnect(Socket),
|
|
||||||
schedule_reconnect(),
|
|
||||||
{next_state, ?STATE_DENIED, State#state{socket = undefined}};
|
|
||||||
|
|
||||||
%% 将缓存中的数据推送到服务器端
|
|
||||||
handle_event(info, flush_cache, ?STATE_ACTIVATED, State = #state{socket = Socket}) ->
|
|
||||||
case cache_model:fetch_next() of
|
|
||||||
{ok, {Id, Packet}} ->
|
|
||||||
send_packet(Socket, Packet),
|
|
||||||
cache_model:delete(Id),
|
|
||||||
{keep_state, State, [{next_event, info, flush_cache}]};
|
|
||||||
error ->
|
|
||||||
{keep_state, State}
|
|
||||||
end;
|
|
||||||
handle_event(info, flush_cache, _, State) ->
|
|
||||||
{keep_state, State};
|
|
||||||
|
|
||||||
handle_event(info, {ssl, Socket, <<8, _/binary>> = PacketBin}, StateName, State = #state{socket = Socket})
|
handle_event(info, {ssl, Socket, <<8, _/binary>> = PacketBin}, StateName, State = #state{socket = Socket})
|
||||||
when StateName =:= ?STATE_ACTIVATED; StateName =:= ?STATE_RESTRICTED ->
|
when StateName =:= ?STATE_ACTIVATED; StateName =:= ?STATE_RESTRICTED ->
|
||||||
#'RequestFrame'{packet_id = PacketId, body = Body} = message_pb:decode_msg(PacketBin, 'RequestFrame'),
|
#'RequestFrame'{packet_id = PacketId, body = Body} = message_pb:decode_msg(PacketBin, 'RequestFrame'),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user