Skip to content

Commit 2ca9b97

Browse files
authored
[RTC-436] Propagate websocket close reason (#140)
* Send reason when closing WS * Revert deps upgrade * Normal text messagess * Fix tests
1 parent fe17b8c commit 2ca9b97

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

lib/jellyfish_web/peer_socket.ex

+10-4
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ defmodule JellyfishWeb.PeerSocket do
8989
{:ok, state}
9090
end
9191

92+
@impl true
9293
def handle_in({msg, [opcode: :text]}, state) do
9394
Logger.warning("""
9495
Received unexpected text message #{msg} from #{inspect(state.peer_id)}, \
@@ -113,18 +114,23 @@ defmodule JellyfishWeb.PeerSocket do
113114
end
114115

115116
@impl true
116-
def handle_info({:stop_connection, reason}, state) do
117-
{:stop, reason, state}
117+
def handle_info({:stop_connection, :peer_removed}, state) do
118+
{:stop, :closed, {1000, "Peer removed"}, state}
119+
end
120+
121+
@impl true
122+
def handle_info({:stop_connection, _reason}, state) do
123+
{:stop, :closed, {1011, "Internal server error"}, state}
118124
end
119125

120126
@impl true
121127
def handle_info(:room_crashed, state) do
122-
{:stop, :room_crashed, state}
128+
{:stop, :closed, {1011, "Internal server error"}, state}
123129
end
124130

125131
@impl true
126132
def handle_info(:room_stopped, state) do
127-
{:stop, :room_stopped, state}
133+
{:stop, :closed, {1000, "Room stopped"}, state}
128134
end
129135

130136
@impl true

test/jellyfish_web/integration/peer_socket_test.exs

+7-4
Original file line numberDiff line numberDiff line change
@@ -149,23 +149,26 @@ defmodule JellyfishWeb.Integration.PeerSocketTest do
149149
create_and_authenticate(token)
150150

151151
_conn = delete(conn, ~p"/room/#{room_id}/peer/#{peer_id}")
152-
assert_receive {:disconnected, {:remote, 1000, ""}}, 1000
152+
assert_receive {:disconnected, {:remote, 1000, "Peer removed"}}, 1000
153153
end
154154

155155
test "room crash", %{room_pid: room_pid, token: token} do
156-
create_and_authenticate(token)
156+
ws = create_and_authenticate(token)
157+
Process.unlink(ws)
158+
ref = Process.monitor(ws)
157159

158160
Process.exit(room_pid, :error)
159161

160-
assert_receive {:disconnected, {:remote, 1000, ""}}, 1000
162+
assert_receive {:disconnected, {:remote, 1011, "Internal server error"}}, 1000
163+
assert_receive {:DOWN, ^ref, :process, ^ws, {:remote, 1011, "Internal server error"}}
161164
end
162165

163166
test "room close", %{room_id: room_id, token: token, conn: conn} do
164167
create_and_authenticate(token)
165168
conn = delete(conn, ~p"/room/#{room_id}/")
166169
response(conn, :no_content)
167170

168-
assert_receive {:disconnected, {:remote, 1000, ""}}, 1000
171+
assert_receive {:disconnected, {:remote, 1000, "Room stopped"}}, 1000
169172
end
170173

171174
def create_and_authenticate(token) do

0 commit comments

Comments
 (0)