@@ -103,7 +103,25 @@ defmodule Livebook.Teams.Connection do
103103 end
104104
105105 def handle_event ( :info , message , @ no_state , data ) when elem ( message , 0 ) in @ expected_messages do
106- handle_websocket_message ( message , data )
106+ case WebSocket . receive ( data . http_conn , data . ref , data . websocket , message ) do
107+ { :ok , conn , websocket , binaries } ->
108+ data = % { data | http_conn: conn , websocket: websocket }
109+ handle_messages ( data , binaries )
110+ { :keep_state , data }
111+
112+ { :closed , conn , websocket , binaries } ->
113+ handle_messages ( data , binaries )
114+ data = % { data | http_conn: conn , websocket: websocket }
115+ Logger . warning ( "Teams WebSocket connection - closed" )
116+ { :keep_state , data , { :next_event , :internal , :connect } }
117+
118+ { :error , conn , websocket , reason } ->
119+ send ( data . listener , { :connection_error , reason } )
120+ data = % { data | http_conn: conn , websocket: websocket }
121+ Logger . warning ( "Teams WebSocket connection - receive error: #{ inspect ( reason ) } " )
122+ ensure_closed ( data )
123+ { :keep_state , data , { :next_event , :internal , :connect } }
124+ end
107125 end
108126
109127 def handle_event ( :info , _message , @ no_state , _data ) do
@@ -128,32 +146,6 @@ defmodule Livebook.Teams.Connection do
128146
129147 # Private
130148
131- defp handle_websocket_message ( _message , % { http_conn: nil } = data ) do
132- { :keep_state , data , { :next_event , :internal , :connect } }
133- end
134-
135- defp handle_websocket_message ( message , data ) do
136- case WebSocket . receive ( data . http_conn , data . ref , data . websocket , message ) do
137- { :ok , conn , websocket , binaries } ->
138- data = % { data | http_conn: conn , websocket: websocket }
139- handle_messages ( data , binaries )
140- { :keep_state , data }
141-
142- { :closed , conn , websocket , binaries } ->
143- handle_messages ( data , binaries )
144- data = % { data | http_conn: conn , websocket: websocket }
145- Logger . warning ( "Teams WebSocket connection - closed" )
146- { :keep_state , data , { :next_event , :internal , :connect } }
147-
148- { :error , conn , websocket , reason } ->
149- send ( data . listener , { :connection_error , reason } )
150- data = % { data | http_conn: conn , websocket: websocket }
151- Logger . warning ( "Teams WebSocket connection - receive error: #{ inspect ( reason ) } " )
152- ensure_closed ( data )
153- { :keep_state , data , { :next_event , :internal , :connect } }
154- end
155- end
156-
157149 defp handle_messages ( data , binaries ) do
158150 for binary <- binaries do
159151 % { type: { topic , message } } = LivebookProto.Event . decode ( binary )
0 commit comments