Skip to content

Commit 241931e

Browse files
authored
Add data_type configuration to PeerConnection.send_data (#200)
1 parent d3ec3c9 commit 241931e

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

lib/ex_webrtc/peer_connection.ex

+5-6
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,9 @@ defmodule ExWebRTC.PeerConnection do
245245
246246
If `ref` does not identify any DataChannel, this function behaves like no-op.
247247
"""
248-
@spec send_data(peer_connection(), DataChannel.ref(), binary()) :: :ok
249-
def send_data(peer_connection, channel_ref, data) do
250-
GenServer.cast(peer_connection, {:send_data, channel_ref, data})
248+
@spec send_data(peer_connection(), DataChannel.ref(), binary(), :string | :binary) :: :ok
249+
def send_data(peer_connection, channel_ref, data, data_type \\ :string) do
250+
GenServer.cast(peer_connection, {:send_data, channel_ref, data_type, data})
251251
end
252252

253253
@doc """
@@ -1265,10 +1265,9 @@ defmodule ExWebRTC.PeerConnection do
12651265
end
12661266

12671267
@impl true
1268-
def handle_cast({:send_data, channel_ref, data}, state) do
1269-
# TODO: allow for configuring the type of data
1268+
def handle_cast({:send_data, channel_ref, data_type, data}, state) do
12701269
{events, sctp_transport} =
1271-
SCTPTransport.send(state.sctp_transport, channel_ref, :string, data)
1270+
SCTPTransport.send(state.sctp_transport, channel_ref, data_type, data)
12721271

12731272
handle_sctp_events(events, state)
12741273

test/ex_webrtc/data_channel_test.exs

+13
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,19 @@ defmodule ExWebRTC.DataChannelTest do
180180
assert_receive {:ex_webrtc, ^pc1, {:data, ^ref1, ^data2}}
181181
end
182182

183+
test "as binary", %{pc1: pc1, pc2: pc2, ref1: ref1, ref2: ref2} do
184+
data1 = <<1, 2, 3>>
185+
:ok = PeerConnection.send_data(pc1, ref1, data1, :binary)
186+
assert_receive {:ex_webrtc, ^pc2, {:data, ^ref2, ^data1}}
187+
188+
data2 = for i <- 1..2000, into: <<>>, do: <<i>>
189+
:ok = PeerConnection.send_data(pc1, ref1, data2, :binary)
190+
assert_receive {:ex_webrtc, ^pc2, {:data, ^ref2, ^data2}}
191+
192+
:ok = PeerConnection.send_data(pc1, ref1, <<>>, :binary)
193+
assert_receive {:ex_webrtc, ^pc2, {:data, ^ref2, <<>>}}
194+
end
195+
183196
test "back and forth", %{pc1: pc1, pc2: pc2, ref1: ref1, ref2: ref2} do
184197
data = for i <- 1..1024, into: <<>>, do: <<i>>
185198
:ok = PeerConnection.send_data(pc2, ref2, data)

0 commit comments

Comments
 (0)