From fd56aa1e16a4299c4d96e8694950d9054db815f4 Mon Sep 17 00:00:00 2001 From: Christopher Date: Tue, 18 Feb 2020 15:11:39 -0600 Subject: [PATCH] remove Session.new, just instantiate a struct --- lib/wampex.ex | 20 +++++---- lib/wampex/session.ex | 95 +++++++++++++++++++------------------------ test/wampex_test.exs | 2 +- 3 files changed, 56 insertions(+), 61 deletions(-) diff --git a/lib/wampex.ex b/lib/wampex.ex index 4f1b7ac..7e46a89 100644 --- a/lib/wampex.ex +++ b/lib/wampex.ex @@ -11,16 +11,22 @@ defmodule Wampex do @type message :: nonempty_list(message_part()) @type arg_list :: [] | nonempty_list(any()) @type arg_keyword :: map() + @type invocation :: + {:invocation, request_id :: integer(), registration_id :: integer(), details :: map(), + arg_list :: arg_list(), arg_keywords :: arg_keyword()} + @type event :: + {:event, subscription_id :: integer(), publication_id :: integer(), details :: map(), + arg_list :: arg_list(), arg_keyword :: arg_keyword()} + @type error :: + {:error, reason :: binary()} + | {:error, type :: integer(), error :: binary(), arg_list :: arg_list(), + arg_keyword :: arg_keyword()} @type handle_response :: {:ok, integer()} - | {:invocation, request_id :: integer(), registration_id :: integer(), details :: map(), - arg_list :: arg_list(), arg_keywords :: arg_keyword()} + | invocation() | {:ok, arg_list :: arg_list(), arg_keyword :: arg_keyword()} - | {:error, reason :: binary()} - | {:error, type :: integer(), error :: binary(), arg_list :: arg_list(), - arg_keyword :: arg_keyword()} - | {:event, subscription_id :: integer(), publication_id :: integer(), details :: map(), - arg_list :: arg_list(), arg_keyword :: arg_keyword()} + | error() + | event() @spec start_link(name: atom(), session_data: Sess.t()) :: {:ok, pid()} diff --git a/lib/wampex/session.ex b/lib/wampex/session.ex index 81f8d57..e35fd7f 100644 --- a/lib/wampex/session.ex +++ b/lib/wampex/session.ex @@ -26,41 +26,30 @@ defmodule Wampex.Session do :realm, :name, :roles, - :request_id, - :transport, - :protocol, - :serializer, + request_id: 0, + protocol: "wamp.2.msgpack", + transport: WebSocket, + serializer: MessagePack, requests: [] ] - @type t :: %__MODULE__{} - - @spec new( - url :: binary(), - realm :: Realm.t(), - roles :: [module()], - transport :: module(), - protocol :: binary(), - serializer :: module() - ) :: t() - def new( - url, - %Realm{} = realm, - roles, - transport \\ WebSocket, - protocol \\ "wamp.2.msgpack", - serializer \\ MessagePack - ) do - %__MODULE__{ - url: url, - realm: realm, - roles: roles, - transport: transport, - protocol: protocol, - serializer: serializer, - request_id: 0 - } - end + @type t :: %__MODULE__{ + id: integer() | nil, + url: binary(), + transport_pid: pid() | module() | nil, + message: Wampex.message() | nil, + event: Wampex.event() | nil, + invocation: Wampex.invocation() | nil, + goodbye: binary() | nil, + realm: Realm.t(), + name: module() | nil, + roles: [module()], + request_id: integer(), + protocol: binary(), + transport: module(), + serializer: module(), + requests: [] + } @spec cast_send_request(name :: atom() | pid(), request :: Wampex.message()) :: :ok def cast_send_request(name, request) do @@ -73,27 +62,6 @@ defmodule Wampex.Session do __MODULE__.call(name, {:send_request, request}, timeout) end - defp do_send(r_id, tt, t, request) do - request_id = get_request_id(r_id) - - request = - case request do - [@yield | _] -> request - _ -> List.insert_at(request, 1, request_id) - end - - tt.send_request(t, request) - request_id - end - - defp get_request_id(current_id) when current_id == @max_id do - 1 - end - - defp get_request_id(current_id) do - current_id + 1 - end - @impl true def handle_call( {:send_request, request}, @@ -257,6 +225,27 @@ defmodule Wampex.Session do end) end + defp do_send(r_id, tt, t, message) do + {request_id, message} = maybe_inject_request_id(r_id, message) + tt.send_request(t, message) + request_id + end + + defp maybe_inject_request_id(r_id, [@yield | _] = message), do: {r_id, message} + + defp maybe_inject_request_id(r_id, message) do + request_id = get_request_id(r_id) + {request_id, List.insert_at(message, 1, request_id)} + end + + defp get_request_id(current_id) when current_id == @max_id do + 1 + end + + defp get_request_id(current_id) do + current_id + 1 + end + defp remove_request(id, requests) do Enum.filter(requests, fn {^id, _} -> false diff --git a/test/wampex_test.exs b/test/wampex_test.exs index 245915b..0a4163c 100644 --- a/test/wampex_test.exs +++ b/test/wampex_test.exs @@ -11,7 +11,7 @@ defmodule WampexTest do @roles [Callee, Caller, Publisher, Subscriber] @device "as987d9a8sd79a87ds" - @session Session.new(@url, @realm, @roles) + @session %Session{url: @url, realm: @realm, roles: @roles} test "session_name" do assert Test.Session = Wampex.session_name(Test) -- 2.45.3