defmodule ExMobileDevice.RemoteServer do use GenServer, restart: :temporary use TypedStruct def start_link(args) do GenServer.start_link(__MODULE__, args) end def start(args) do GenServer.start(__MODULE__, args) end def stop(pid) do GenServer.stop(pid) end typedstruct do field(:sock, port() | :ssl.sslsocket()) end @impl true def init(args) do udid = Keyword.fetch!(args, :udid) service = Keyword.fetch!(args, :service) case ExMobileDevice.Services.connect(udid, service) do {:ok, sock} -> sock = if Keyword.get(args, :remove_ssl_context, false) do {:ok, port} = :ssl.close(sock, {self(), 1000}) port else sock end {:ok, %__MODULE__{sock: sock}} end {:ok, nil} end end