From: Christopher Date: Sun, 16 Feb 2020 15:30:52 +0000 (-0600) Subject: update session state machine X-Git-Url: http://git.entropealabs.com/?a=commitdiff_plain;h=92baea0207008eef9440fc45a1af04cd67fd8a1e;p=wampex.git update session state machine --- diff --git a/lib/wampex/session.ex b/lib/wampex/session.ex index 089a24d..e6283e1 100644 --- a/lib/wampex/session.ex +++ b/lib/wampex/session.ex @@ -51,7 +51,7 @@ defmodule Wampex.Session do def handle_resource("HandleMessage", _, _, data) do Logger.info("Handling Message") - {:ok, data, []} + {:ok, data, [{:next_event, :internal, :noop}]} end def handle_resource("Abort", _, _, data) do @@ -74,6 +74,11 @@ defmodule Wampex.Session do {:ok, data, []} end + def handle_resource(resource, _, state, data) do + Logger.info("No specific resource handler for #{resource} in state #{state}") + {: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 diff --git a/priv/session.json b/priv/session.json index dadb1fa..95c2218 100644 --- a/priv/session.json +++ b/priv/session.json @@ -21,7 +21,7 @@ "Next": "Established", "Catch": [ { - "ErrorEquals": [":abort"], + "ErrorEquals": [":abort", ":invalid_credentials"], "Next": "Abort" } ] @@ -37,14 +37,108 @@ { "StringEquals": ":good_bye", "Next": "GoodBye" + }, + { + "StringEquals": ":abort", + "Next": "Abort" } ] - }, "HandleMessage": { - "Type": "Task", + "Type": "Choice", "Resource": "HandleMessage", - "TransitionEvent": ":handled", + "Choices": [ + { + "StringEquals": ":noop", + "Next": "Established" + }, + { + "StringEquals": ":event", + "Next": "BroadcastEvent" + }, + { + "StringEquals": ":yield", + "Next": "Yield" + }, + { + "StringEquals": ":published", + "Next": "Published" + }, + { + "StringEquals": ":unsubscribed", + "Next": "Unsubscribed" + }, + { + "StringEquals": ":subscribed", + "Next": "Subscribed" + }, + { + "StringEquals": ":result", + "Next": "Result" + }, + { + "StringEquals": ":registered", + "Next": "Registered" + }, + { + "StringEquals": ":unregistered", + "Next": "Unregistered" + }, + { + "StringEquals": ":invocation", + "Next": "Invocation" + } + ] + }, + "Yield": { + "Type": "Task", + "Resource": "YieldResult", + "TransitionEvent": ":yielded", + "Next": "Established" + }, + "BroadcastEvent": { + "Type": "Task", + "Resource": "HandleBroadcast", + "Next": "Established" + }, + "Subscribed": { + "Type": "Task", + "Resource": "HandleSubscribed", + "Next": "Established" + }, + "Published": { + "Type": "Task", + "Resource": "HandlePublished", + "Next": "Established" + }, + "Unsubscribed": { + "Type": "Task", + "Resource": "HandleUnsubscribed", + "Next": "Established" + }, + "Subscribed": { + "Type": "Task", + "Resource": "HandleSubscribed", + "Next": "Established" + }, + "Result": { + "Type": "Task", + "Resource": "HandleResult", + "Next": "Established" + }, + "Registered": { + "Type": "Task", + "Resource": "HandleRegistered", + "Next": "Established" + }, + "Unregistered": { + "Type": "Task", + "Resource": "HandleUnregistered", + "Next": "Established" + }, + "Invocation": { + "Type": "Task", + "Resource": "HandleInvocation", "Next": "Established" }, "GoodBye": {