--- /dev/null
+defmodule Wampex.Messages do
+ alias StatesLanguage, as: SL
+ alias Wampex.Session
+
+ require Logger
+
+ @welcome 2
+ @abort 3
+ @goodbye 6
+ @error 8
+ @published 17
+ @subscribed 33
+ @unsubscribed 35
+ @event 36
+ @result 50
+ @registered 65
+ @unregistered 67
+ @invocation 68
+
+ def handle([@welcome, session_id, _dets], %SL{data: %Session{} = data} = sl) do
+ {%SL{sl | data: %Session{data | id: session_id}}, [{:next_event, :internal, :noop}]}
+ end
+
+ def handle([@abort, _dets, reason], sl) do
+ Logger.warn("Session aborted: #{reason}")
+ {sl, [{:next_event, :internal, :abort}]}
+ end
+
+ def handle([@goodbye, _dets, reason], sl) do
+ Logger.warn("Goodbye: #{reason}")
+ {sl, [{:next_event, :internal, :goodbye}]}
+ end
+
+ def handle([@error, type, id, dets, error], sl) do
+ handle([@error, type, id, dets, error, [], %{}], sl)
+ end
+
+ def handle([@error, type, id, dets, error, arg_l], sl) do
+ handle([@error, type, id, dets, error, arg_l, %{}], sl)
+ end
+
+ def handle([@error, type, id, dets, error, arg_l, arg_kw], sl) do
+ Logger.error("""
+ Request Type: #{type}
+ Id: #{id}
+ Details: #{inspect(dets)}
+ Error: #{error}
+ ArgList: #{inspect(arg_l)}
+ ArgKW: #{inspect(arg_kw)}
+ """)
+
+ {sl, [{:next_event, :internal, :noop}]}
+ end
+
+ def handle([@published, _request_id, id], sl) do
+ Logger.info("Published: #{id}")
+ {sl, [{:next_event, :internal, :noop}]}
+ end
+
+ def handle([@subscribed, _request_id, id], sl) do
+ Logger.info("Subscribed: #{id}")
+ {sl, [{:next_event, :internal, :noop}]}
+ end
+
+ def handle([@unsubscribed, request_id], sl) do
+ Logger.info("Unsubscribed: #{request_id}")
+ {sl, [{:next_event, :internal, :noop}]}
+ end
+
+ def handle([@event, sub_id, pub_id, dets], sl) do
+ handle([@event, sub_id, pub_id, dets, [], %{}], sl)
+ end
+
+ def handle([@event, sub_id, pub_id, dets, arg_l], sl) do
+ handle([@event, sub_id, pub_id, dets, arg_l, %{}], sl)
+ end
+
+ def handle([@event, sub_id, pub_id, _dets, arg_l, arg_kw], sl) do
+ Logger.info(
+ "Got event for #{sub_id} from #{pub_id} with args #{inspect(arg_l)} and #{inspect(arg_kw)}"
+ )
+
+ {sl, [{:next_event, :internal, :noop}]}
+ end
+
+ def handle([@result, id, dets], sl) do
+ handle([@result, id, dets, [], %{}], sl)
+ end
+
+ def handle([@result, id, dets, arg_l], sl) do
+ handle([@result, id, dets, arg_l, %{}], sl)
+ end
+
+ def handle([@result, id, _dets, arg_l, arg_kw], sl) do
+ Logger.info("Received result for request #{id} #{inspect(arg_l)}, #{inspect(arg_kw)}")
+ {sl, [{:next_event, :internal, :noop}]}
+ end
+
+ def handle([@unregistered, request_id], sl) do
+ Logger.info("Unregistered #{request_id}")
+ {sl, [{:next_event, :internal, :noop}]}
+ end
+
+ def handle([@registered, _request_id, id], sl) do
+ Logger.info("Registered #{id}")
+ {sl, [{:next_event, :internal, :noop}]}
+ end
+
+ def handle([@invocation, id, dets], sl) do
+ handle([@invocation, id, dets, [], %{}], sl)
+ end
+
+ def handle([@invocation, id, dets, arg_l], sl) do
+ handle([@invocation, id, dets, arg_l, %{}], sl)
+ end
+
+ def handle([@invocation, id, _dets, arg_l, arg_kw], sl) do
+ Logger.info("Received invocation for request #{id} #{inspect(arg_l)}, #{inspect(arg_kw)}")
+ {sl, [{:next_event, :internal, :noop}]}
+ end
+end
alias StatesLanguage, as: SL
alias Wampex.Session, as: Sess
- alias Wampex.Realm
+ alias Wampex.{Messages, Realm}
alias Wampex.Serializer.JSON
alias Wampex.Transport.WebSocket
]
)
- {:ok, data, []}
+ {:ok, data, [{:next_event, :internal, :hello_sent}]}
end
def handle_resource(
{:ok, data, []}
end
- def handle_resource("HandleMessage", _, _, data) do
- Logger.info("Handling Message #{inspect(data.data.message)}")
- {:ok, data, [{:next_event, :internal, :noop}]}
+ def handle_resource("HandleMessage", _, _, %SL{data: %Sess{message: msg}} = data) do
+ Logger.info("Handling Message #{inspect(msg)}")
+ {data, actions} = Messages.handle(msg, data)
+ {:ok, data, actions}
end
def handle_resource("Abort", _, _, data) do
{:ok, data, []}
end
- def handle_info({:set_session_id, id}, "Init", %SL{data: %Sess{} = sess} = data) do
- {:ok, %SL{data | data: %Sess{sess | id: id}}, [{:next_event, :internal, :welcome}]}
- end
-
def handle_info({:set_message, message}, "Established", %SL{data: %Sess{} = sess} = data) do
{:ok, %SL{data | data: %Sess{sess | message: message}},
[{:next_event, :internal, :message_received}]}