defmodule ExP2P do use Rustler, otp_app: :ex_p2p, crate: :exp2p def start(_waiting, _bind, _bootstrap), do: :erlang.nif_error(:nif_not_loaded) def set_controlling_pid(_resp_channel, _pid), do: :erlang.nif_error(:nif_not_loaded) def send_stream_response(_endpoint, _stream, _resp, _waiting, _timeout), do: :erlang.nif_error(:nif_not_loaded) def send_bidirectional(_endpoint, _connection, _resp, _waiting, _timeout), do: :erlang.nif_error(:nif_not_loaded) def send_bidirectional_open(_endpoint, _connection, _waiting, _listener_pid), do: :erlang.nif_error(:nif_not_loaded) def send_stream_finish(_endpoint, _stream), do: :erlang.nif_error(:nif_not_loaded) def send_unidirectional(_endpoint, _connection, _resp, _waiting, _timeout), do: :erlang.nif_error(:nif_not_loaded) def send_unidirectional_many(_endpoint, _addrs, _resp, _waiting, _timeout), do: :erlang.nif_error(:nif_not_loaded) def connect_to_peer(_endpoint, _peers, _waiting, _timeout), do: :erlang.nif_error(:nif_not_loaded) @moduledoc """ Documentation for `ExP2p`. """ @doc """ Hello world. ## Examples iex> ExP2p.hello() :world """ def connect(endpoint, peers, timeout \\ 10000) do :ok = connect_to_peer(endpoint, peers, self(), timeout - 100) receive do {:new_connection, conn} -> {:ok, conn} after timeout -> {:error, :timeout} end end def unidirectional_many(endpoint, addrs, msg, timeout \\ 10000) do :ok = send_unidirectional_many(endpoint, addrs, msg, self(), timeout - 100) receive do :ok -> :ok {:error, err} -> {:error, err} after timeout -> {:error, :timeout} end end def unidirectional(endpoint, connection, msg, timeout \\ 10000) do :ok = send_unidirectional(endpoint, connection, msg, self(), timeout - 100) receive do :ok -> :ok {:error, err} -> {:error, err} after timeout -> {:error, :timeout} end end def bidirectional(endpoint, connection, msg, timeout \\ 10000) do :ok = send_bidirectional(endpoint, connection, msg, self(), timeout - 100) receive do {:message_reply, reply} -> {:ok, reply} {:error, err} -> {:error, err} after timeout -> {:error, :timeout} end end def bidirectional_open(endpoint, connection, listener_pid) do :ok = send_bidirectional_open(endpoint, connection, self(), listener_pid) receive do {:new_stream, stream} -> {:ok, stream} {:error, err} -> {:error, err} end end def stream_send(endpoint, stream, msg, timeout \\ 10000) do :ok = send_stream_response(endpoint, stream, msg, self(), timeout - 100) receive do :ok -> :ok {:error, err} -> {:error, err} after timeout -> {:error, :timeout} end end def stream_finish(endpoint, stream) do :ok = send_stream_finish(endpoint, stream) end end