fix transport
This commit is contained in:
parent
c15a38e8c8
commit
ce2e8a4d60
@ -29,9 +29,6 @@
|
||||
|
||||
session :: sdlan_session:session(),
|
||||
|
||||
frames_recv = 0,
|
||||
bytes_recv = 0,
|
||||
|
||||
close_reason = undefined
|
||||
}).
|
||||
|
||||
@ -63,8 +60,7 @@ callback_mode() ->
|
||||
handle_event_function.
|
||||
|
||||
handle_event(info, {handshake, Ref, Transport, Socket, Timeout}, handshaking,
|
||||
State = #state{ref = Ref, transport = Transport, max_packet_size = MaxPacketSize,
|
||||
heartbeat_sec = HeartbeatSec}) ->
|
||||
State = #state{ref = Ref, transport = Transport, max_packet_size = MaxPacketSize, heartbeat_sec = HeartbeatSec}) ->
|
||||
case Transport:handshake(Socket, [], Timeout) of
|
||||
{ok, SslSocket} ->
|
||||
ok = Transport:setopts(SslSocket, [{mode, binary}, {packet, 2}, {active, true}]),
|
||||
@ -75,19 +71,8 @@ handle_event(info, {handshake, Ref, Transport, Socket, Timeout}, handshaking,
|
||||
{stop, {ssl_handshake_failed, Reason}, State}
|
||||
end;
|
||||
|
||||
handle_event(info, {ssl, Socket, Data}, _StateName,
|
||||
State = #state{socket = Socket, bytes_recv = BytesRecv, frames_recv = FramesRecv}) when is_binary(Data) ->
|
||||
{keep_state, State#state{bytes_recv = BytesRecv + byte_size(Data), frames_recv = FramesRecv + 1},
|
||||
[{next_event, internal, {frame, Data}}]};
|
||||
|
||||
handle_event(info, {ssl_closed, Socket}, _StateName, State = #state{socket = Socket}) ->
|
||||
expected_stop(socket_closed, State);
|
||||
|
||||
handle_event(info, {ssl_error, Socket, Reason}, _StateName, State = #state{socket = Socket}) ->
|
||||
expected_stop({socket_error, Reason}, State);
|
||||
|
||||
%% 处理内部的包消息
|
||||
handle_event(internal, {frame, Frame}, StateName, State = #state{socket = Socket, transport = Transport, session = Session}) ->
|
||||
handle_event(info, {ssl, Socket, Frame}, StateName,
|
||||
State = #state{socket = Socket, transport = Transport, session = Session}) when is_binary(Frame) ->
|
||||
case sdlan_session:handle_frame(Frame, Session) of
|
||||
{ok, NSession, Packets} ->
|
||||
send_packets(Transport, Socket, Packets),
|
||||
@ -97,6 +82,12 @@ handle_event(internal, {frame, Frame}, StateName, State = #state{socket = Socket
|
||||
{stop, Reason, State#state{session = NSession}}
|
||||
end;
|
||||
|
||||
handle_event(info, {ssl_closed, Socket}, _StateName, State = #state{socket = Socket}) ->
|
||||
expected_stop(socket_closed, State);
|
||||
|
||||
handle_event(info, {ssl_error, Socket, Reason}, _StateName, State = #state{socket = Socket}) ->
|
||||
expected_stop({socket_error, Reason}, State);
|
||||
|
||||
handle_event(info, {timeout, TimerRef, ping_ticker}, _StateName, State = #state{session = Session}) ->
|
||||
case sdlan_session:handle_timeout(TimerRef, Session) of
|
||||
{ok, NSession} ->
|
||||
@ -167,20 +158,13 @@ expected_stop(Reason, State) ->
|
||||
next_state_name(_StateName, Session) ->
|
||||
sdlan_session:state_name(Session).
|
||||
|
||||
debug_info(StateName, #state{
|
||||
session = Session,
|
||||
frames_recv = FramesRecv,
|
||||
bytes_recv = BytesRecv,
|
||||
heartbeat_sec = HeartbeatSec
|
||||
}) ->
|
||||
debug_info(StateName, #state{session = Session, heartbeat_sec = HeartbeatSec}) ->
|
||||
ProcInfo = maps:from_list(process_info(self(), [message_queue_len, memory, reductions])),
|
||||
SessionInfo = sdlan_session:debug_info(Session),
|
||||
maps:merge(SessionInfo, ProcInfo#{
|
||||
state => StateName,
|
||||
session => SessionInfo,
|
||||
frames_recv => FramesRecv,
|
||||
frames_sent => get_counter(ssl_frames_sent),
|
||||
bytes_recv => BytesRecv,
|
||||
bytes_sent => get_counter(ssl_bytes_sent),
|
||||
heartbeat_sec => HeartbeatSec
|
||||
}).
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user