Skip to content

Commit 5d9d457

Browse files
authored
Modify Room.add_peer function (#63)
* Modify Room.add_peer function * Fix test
1 parent 8480d29 commit 5d9d457

File tree

3 files changed

+24
-13
lines changed

3 files changed

+24
-13
lines changed

lib/jellyfish/room.ex

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ defmodule Jellyfish.Room do
1616
...> config: %{max_peers: 10, video_codec: nil},
1717
...> peers: []}
1818
true
19-
iex> assert {:ok, %Jellyfish.Peer{
19+
iex> assert {:ok, %{peer: %Jellyfish.Peer{
2020
...> status: :disconnected,
2121
...> type: Jellyfish.Peer.WebRTC,
2222
...> tracks: []
23-
...> } = peer, _peer_token} = Jellyfish.Room.add_peer(client, room.id, Jellyfish.Peer.WebRTC)
23+
...> } = peer}} = Jellyfish.Room.add_peer(client, room.id, Jellyfish.Peer.WebRTC)
2424
iex> %Jellyfish.Peer{
2525
...> id: peer.id,
2626
...> status: :disconnected,
@@ -64,6 +64,14 @@ defmodule Jellyfish.Room do
6464
"""
6565
@type peer_token :: String.t()
6666

67+
@typedoc """
68+
Jellyfish response to adding a peer to room. It consists of:
69+
* peer structure
70+
* token used for authentication when connecting through websocket to jellyfish
71+
* ws_url that is a websocket adress to which this specific peer have to connect
72+
"""
73+
@type peer_create_response :: %{peer: Peer.t(), token: peer_token(), ws_url: String.t()}
74+
6775
@typedoc """
6876
Options used for creating a room.
6977
@@ -164,7 +172,8 @@ defmodule Jellyfish.Room do
164172
Adds a peer to the room with `room_id`.
165173
"""
166174
@spec add_peer(Client.t(), id(), Peer.options() | Peer.type()) ::
167-
{:ok, Peer.t(), peer_token()} | {:error, atom() | String.t()}
175+
{:ok, peer_create_response()}
176+
| {:error, atom() | String.t()}
168177
def add_peer(client, room_id, peer) do
169178
peer = if is_atom(peer), do: struct!(peer), else: peer
170179

@@ -175,9 +184,9 @@ defmodule Jellyfish.Room do
175184
Map.from_struct(peer)
176185
|> Map.new(fn {k, v} -> {snake_case_to_camel_case(k), v} end)
177186
}),
178-
%{"peer" => peer, "token" => token} <- data,
187+
%{"peer" => peer, "token" => token, "peer_websocket_url" => peer_websocket_url} <- data,
179188
result <- Peer.from_json(peer) do
180-
{:ok, result, token}
189+
{:ok, %{peer: result, token: token, ws_url: peer_websocket_url}}
181190
end
182191
end
183192

test/jellyfish/notifier_test.exs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ defmodule Jellyfish.NotifierTest do
154154
peer_disconnected_timeout_s: @peer_disconnected_timeout_s
155155
)
156156

157-
{:ok, %Jellyfish.Peer{id: peer_id}, peer_token} = Room.add_peer(client, room_id, @peer_opts)
157+
{:ok, %{peer: %Jellyfish.Peer{id: peer_id}, token: peer_token}} =
158+
Room.add_peer(client, room_id, @peer_opts)
158159

159160
{:ok, peer_ws} = WS.start_link("ws://#{jellyfish_address}/socket/peer/websocket")
160161

@@ -238,16 +239,17 @@ defmodule Jellyfish.NotifierTest do
238239
end
239240

240241
defp create_room_and_auth_ws(client, room_opts \\ []) do
241-
{:ok, %Jellyfish.Room{id: room_id}, jellyfish_address} =
242+
{:ok, %Jellyfish.Room{id: room_id}, _jellyfish_address} =
242243
Room.create(client,
243244
max_peers: Keyword.get(room_opts, :max_peers, @max_peers),
244245
video_codec: Keyword.get(room_opts, :video_codec, @video_codec),
245246
webhook_url: Keyword.get(room_opts, :webhook_url, @webhook_address)
246247
)
247248

248-
{:ok, %Jellyfish.Peer{id: peer_id}, peer_token} = Room.add_peer(client, room_id, @peer_opts)
249+
{:ok, %{peer: %Jellyfish.Peer{id: peer_id}, token: peer_token, ws_url: peer_ws_url}} =
250+
Room.add_peer(client, room_id, @peer_opts)
249251

250-
{:ok, peer_ws} = WS.start_link("ws://#{jellyfish_address}/socket/peer/websocket")
252+
{:ok, peer_ws} = WS.start_link("ws://#{peer_ws_url}")
251253

252254
auth_request = %PeerMessage{content: {:auth_request, %AuthRequest{token: peer_token}}}
253255
:ok = WS.send_frame(peer_ws, auth_request)

test/jellyfish/room_test.exs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -419,10 +419,10 @@ defmodule Jellyfish.RoomTest do
419419
setup [:create_room]
420420

421421
test "when request is valid", %{client: client, room_id: room_id} do
422-
assert {:ok, peer, _peer_token} = Room.add_peer(client, room_id, @peer_opts)
422+
assert {:ok, %{peer: peer}} = Room.add_peer(client, room_id, @peer_opts)
423423
assert %Jellyfish.Peer{type: Peer.WebRTC} = peer
424424

425-
assert {:ok, peer, _peer_token} = Room.add_peer(client, room_id, @peer_opts_module)
425+
assert {:ok, %{peer: peer}} = Room.add_peer(client, room_id, @peer_opts_module)
426426
assert %Jellyfish.Peer{type: Peer.WebRTC} = peer
427427
end
428428

@@ -440,7 +440,7 @@ defmodule Jellyfish.RoomTest do
440440
{:ok, %Jellyfish.Room{id: room_id}, _jellyfish_address} =
441441
Room.create(client, max_peers: 1, video_codec: @video_codec)
442442

443-
assert {:ok, _peer, _peer_token} = Room.add_peer(client, room_id, @peer_opts)
443+
assert {:ok, _response} = Room.add_peer(client, room_id, @peer_opts)
444444

445445
error_msg = "Request failed: Reached peer limit in room #{room_id}"
446446

@@ -582,7 +582,7 @@ defmodule Jellyfish.RoomTest do
582582
end
583583

584584
defp create_peer(state) do
585-
assert {:ok, %Jellyfish.Peer{id: id}, _token} =
585+
assert {:ok, %{peer: %Jellyfish.Peer{id: id}}} =
586586
Room.add_peer(state.client, state.room_id, @peer_opts)
587587

588588
%{peer_id: id}

0 commit comments

Comments
 (0)