@@ -154,33 +154,30 @@ receive_handshake(Buffer, Transport, Socket) ->
154154 end .
155155
156156% % @doc Send frame to server
157+ -spec send (websocket_req :frame (), websocket_req :req ()) -> ok | {error , term ()}.
157158send (Frame , WSReq ) ->
158159 Socket = websocket_req :socket (WSReq ),
159160 Transport = websocket_req :transport (WSReq ),
160161 Transport :send (Socket , encode_frame (Frame )).
161162
162-
163163% % @doc Main loop
164164-spec websocket_loop (WSReq :: websocket_req :req (), HandlerState :: any (),
165165 Buffer :: binary ()) ->
166166 ok .
167167websocket_loop (WSReq , HandlerState , Buffer ) ->
168168 receive
169- Message -> handle_websocket_message (WSReq , HandlerState , Buffer , Message )
169+ Message -> handle_websocket_message (WSReq , HandlerState , Buffer , Message )
170170 end .
171171
172172handle_websocket_message (WSReq , HandlerState , Buffer , Message ) ->
173173 [Handler , Remaining , Socket ] =
174174 websocket_req :get ([handler , remaining , socket ], WSReq ),
175175 case Message of
176176 keepalive ->
177- case websocket_req :get ([keepalive_timer ], WSReq ) of
178- [undefined ] -> ok ;
179- [OldTimer ] -> erlang :cancel_timer (OldTimer )
180- end ,
177+ cancel_keepalive_timer (WSReq ),
181178 ok = send ({ping , <<>>}, WSReq ),
182179 KATimer = erlang :send_after (websocket_req :keepalive (WSReq ), self (), keepalive ),
183- websocket_loop (websocket_req :set ([{ keepalive_timer , KATimer }] , WSReq ), HandlerState , Buffer );
180+ websocket_loop (websocket_req :keepalive_timer ( KATimer , WSReq ), HandlerState , Buffer );
184181 {cast , Frame } ->
185182 ok = send (Frame , WSReq ),
186183 websocket_loop (WSReq , HandlerState , Buffer );
@@ -196,7 +193,6 @@ handle_websocket_message(WSReq, HandlerState, Buffer, Message) ->
196193 websocket_req :opcode (WSReq ), Remaining , Data , Buffer )
197194 end ;
198195 Msg ->
199- Handler = websocket_req :handler (WSReq ),
200196 try Handler :websocket_info (Msg , WSReq , HandlerState ) of
201197 HandlerResponse ->
202198 handle_response (WSReq , HandlerResponse , Buffer )
@@ -213,6 +209,16 @@ handle_websocket_message(WSReq, HandlerState, Buffer, Message) ->
213209 end
214210 end .
215211
212+ -spec cancel_keepalive_timer (websocket_req :req ()) -> ok .
213+ cancel_keepalive_timer (WSReq ) ->
214+ case websocket_req :keepalive_timer (WSReq ) of
215+ undefined ->
216+ ok ;
217+ OldTimer ->
218+ erlang :cancel_timer (OldTimer ),
219+ ok
220+ end .
221+
216222-spec websocket_close (WSReq :: websocket_req :req (),
217223 HandlerState :: any (),
218224 Reason :: tuple ()) -> ok .
0 commit comments