diff options
Diffstat (limited to 'lib/lkn/core/puppeteer.ex')
-rw-r--r-- | lib/lkn/core/puppeteer.ex | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/lkn/core/puppeteer.ex b/lib/lkn/core/puppeteer.ex index 6433b49..f362c4f 100644 --- a/lib/lkn/core/puppeteer.ex +++ b/lib/lkn/core/puppeteer.ex @@ -127,6 +127,14 @@ defmodule Lkn.Core.Puppeteer do {:noreply, state} end end + def handle_cast({:instance_digest, instance_key, map, puppets}, state) do + if state.instance_key == Lkn.Prelude.Option.some(instance_key) do + s2 = instance_digest(state.state, instance_key, map, puppets) + {:noreply, %State{state|state: s2}} + else + {:noreply, state} + end + end def handle_cast({:leave_instance, instance_key}, state) do if state.instance_key == Lkn.Prelude.Option.some(instance_key) do s2 = leave_instance(state.state, instance_key) @@ -184,6 +192,7 @@ defmodule Lkn.Core.Puppeteer do @callback puppet_enter(s :: state, instance_key :: Lkn.Core.Instance.k, puppet_key :: Lkn.Core.Puppet.k, digest :: Lkn.Core.Entity.digest) :: state @callback puppet_leave(s :: state, instance_key :: Lkn.Core.Instance.k, puppet_key :: Lkn.Core.Puppet.k) :: state @callback destroy(puppeteer_key :: k, s :: state, instance_key :: Option.t(Lkn.Core.Instance.k), reason :: any) :: term + @callback instance_digest(s :: state, instance_key :: Lkn.Core.Instance, map :: Lkn.Core.Entity.digest, puppets :: Lkn.Core.Entity.digest) :: state @spec leave_instance(k, Instance.k) :: :ok def leave_instance(puppeteer_key, instance_key) do @@ -195,6 +204,10 @@ defmodule Lkn.Core.Puppeteer do GenServer.call(Name.puppeteer(puppeteer_key), {:find_instance, map_key}) end + def instance_digest(puppeteer_key, instance_key, map, puppets) do + GenServer.cast(Name.puppeteer(puppeteer_key), {:instance_digest, instance_key, map, puppets}) + end + def puppet_enter(puppeteer_key, instance_key, puppet_key, digest) do GenServer.cast(Name.puppeteer(puppeteer_key), {:puppet_enter, instance_key, puppet_key, digest}) end |