]> Entropealabs - wampex.git/commitdiff
remove Session.new, just instantiate a struct
authorChristopher <chris@entropealabs.com>
Tue, 18 Feb 2020 21:11:39 +0000 (15:11 -0600)
committerChristopher <chris@entropealabs.com>
Tue, 18 Feb 2020 21:11:39 +0000 (15:11 -0600)
lib/wampex.ex
lib/wampex/session.ex
test/wampex_test.exs

index 4f1b7aca68432e5a3112e75e7ebe8ff7c7204343..7e46a8980838b35be66c1aa8ae80f283f388cbd4 100644 (file)
@@ -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()}
index 81f8d5708a4a17db6ad0b36910ef1d04b5292f9c..e35fd7f85a220e018035c6eadfccea065831754e 100644 (file)
@@ -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
index 245915b664b7ba2eb0c20cedcda554d07e1c5bfc..0a4163c2e20fd4a5a6f449dbd0a1d875336c7387 100644 (file)
@@ -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)