urbit/pkg/arvo/app/hood.hoon

133 lines
4.5 KiB
Plaintext
Raw Normal View History

/+ default-agent
2020-06-16 10:29:17 +03:00
/+ drum=hood-drum, helm=hood-helm, kiln=hood-kiln
2019-09-05 01:44:22 +03:00
|%
2021-08-18 01:16:48 +03:00
+$ state
$~ [%26 *state:drum *state:helm *state:kiln]
$>(%26 any-state)
2021-08-18 01:16:48 +03:00
::
+$ any-state
2021-08-11 19:23:36 +03:00
$% [ver=?(%1 %2 %3 %4 %5 %6) lac=(map @tas fin-any-state)]
[%7 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
[%8 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
[%9 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
[%10 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
[%11 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
[%12 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
[%13 drum=state-2:drum helm=state-1:helm kiln=state-1:kiln]
[%14 drum=state-2:drum helm=state-1:helm kiln=state-1:kiln]
[%15 drum=state-2:drum helm=state-1:helm kiln=state-2:kiln]
[%16 drum=state-4:drum helm=state-1:helm kiln=state-3:kiln]
[%17 drum=state-4:drum helm=state-1:helm kiln=state-4:kiln]
[%18 drum=state-4:drum helm=state-1:helm kiln=state-5:kiln]
[%19 drum=state-4:drum helm=state-1:helm kiln=state-6:kiln]
[%20 drum=state-4:drum helm=state-1:helm kiln=state-7:kiln]
[%21 drum=state-4:drum helm=state-1:helm kiln=state-8:kiln]
[%22 drum=state-4:drum helm=state-1:helm kiln=state-9:kiln]
[%23 drum=state-4:drum helm=state-2:helm kiln=state-9:kiln]
2022-09-02 06:47:28 +03:00
[%24 drum=state-4:drum helm=state-2:helm kiln=state-10:kiln]
[%25 drum=state-5:drum helm=state-2:helm kiln=state-10:kiln]
[%26 drum=state-6:drum helm=state-2:helm kiln=state-10:kiln]
==
+$ any-state-tuple
$: drum=any-state:drum
helm=any-state:helm
kiln=any-state:kiln
==
+$ fin-any-state
$% [%drum any-state:drum]
[%helm any-state:helm]
[%kiln any-state:kiln]
[%write *] :: gets deleted
==
2019-09-05 01:44:22 +03:00
--
2020-06-16 10:29:17 +03:00
^- agent:gall
=| =state
|_ =bowl:gall
+* this .
def ~(. (default-agent this %|) bowl)
2020-06-16 10:29:17 +03:00
drum-core (drum bowl drum.state)
helm-core (helm bowl helm.state)
kiln-core (kiln bowl kiln.state)
::
++ on-fail on-fail:def
++ on-init
^- step:agent:gall
=^ h helm.state on-init:helm-core
=^ d drum.state on-init:drum-core
=^ k kiln.state on-init:kiln-core
[:(welp d k) this]
::
2020-06-16 10:29:17 +03:00
++ on-leave on-leave:def
++ on-peek
|= =path
^- (unit (unit cage))
?+ path (on-peek:def path)
[* %kiln *] (on-peek:kiln-core path)
==
::
++ on-save !>(state)
2019-11-07 09:19:32 +03:00
++ on-load
2019-09-05 01:44:22 +03:00
|= =old-state=vase
^- step:agent:gall
=+ !<(old=any-state old-state-vase)
=/ tup=any-state-tuple
?+ -.old +.old
?(%1 %2 %3 %4 %5 %6)
:* =-(?>(?=(%drum -<) ->) (~(got by lac.old) %drum))
=-(?>(?=(%helm -<) ->) (~(got by lac.old) %helm))
=-(?>(?=(%kiln -<) ->) (~(got by lac.old) %kiln))
==
==
2021-08-18 01:16:48 +03:00
=^ d drum.state (on-load:(drum bowl *state:drum) -.old drum.tup)
=^ h helm.state (on-load:(helm bowl *state:helm) -.old helm.tup)
=^ k kiln.state (on-load:(kiln bowl *state:kiln) -.old kiln.tup)
[:(welp d h k) this]
2019-09-05 01:44:22 +03:00
::
2019-11-07 09:19:32 +03:00
++ on-poke
2019-09-05 01:44:22 +03:00
|= [=mark =vase]
2020-06-16 10:29:17 +03:00
^- step:agent:gall
|^
=/ fin (end [3 4] mark)
?: =(%drum fin) poke-drum
?: =(%helm fin) poke-helm
?: =(%kiln fin) poke-kiln
2020-06-16 10:29:17 +03:00
::
?+ mark (on-poke:def mark vase)
%atom poke-helm(mark %helm-atom)
%dill-poke poke-drum
%hood-sync poke-kiln(mark %kiln-sync)
%write-sec-atom poke-helm(mark %helm-write-sec-atom)
2020-06-16 10:29:17 +03:00
==
++ poke-drum =^(c drum.state (poke:drum-core mark vase) [c this])
++ poke-helm =^(c helm.state (poke:helm-core mark vase) [c this])
++ poke-kiln =^(c kiln.state (poke:kiln-core mark vase) [c this])
2020-06-16 10:29:17 +03:00
--
2019-09-05 01:44:22 +03:00
::
2019-11-07 09:19:32 +03:00
++ on-watch
2019-09-06 06:01:31 +03:00
|= =path
2020-06-16 10:29:17 +03:00
^- step:agent:gall
?+ path (on-watch:def +<)
2021-07-17 02:54:20 +03:00
[%drum *] =^(c drum.state (peer:drum-core t.path) [c this])
[%kiln *] =^(c kiln.state (peer:kiln-core t.path) [c this])
[%dill *] =^(c drum.state (peer:drum-core +<) [c this])
2020-06-16 10:29:17 +03:00
==
2019-09-05 01:44:22 +03:00
::
2019-11-07 09:19:32 +03:00
++ on-agent
2021-07-17 02:54:20 +03:00
|= [=wire syn=sign:agent:gall]
2020-06-16 10:29:17 +03:00
^- step:agent:gall
?+ wire ~|([%hood-bad-wire wire] !!)
2021-07-17 02:54:20 +03:00
[%drum *] =^(c drum.state (take-agent:drum-core t.wire syn) [c this])
[%helm *] =^(c helm.state (take-agent:helm-core t.wire syn) [c this])
[%kiln *] =^(c kiln.state (take-agent:kiln-core t.wire syn) [c this])
2020-06-16 10:29:17 +03:00
==
2019-09-05 01:44:22 +03:00
::
2019-11-07 09:19:32 +03:00
++ on-arvo
2020-06-18 06:31:37 +03:00
|= [=wire syn=sign-arvo]
2020-06-16 10:29:17 +03:00
^- step:agent:gall
?+ wire ~|([%hood-bad-wire wire] !!)
[%drum *] =^(c drum.state (take-arvo:drum-core t.wire syn) [c this])
2020-06-18 06:31:37 +03:00
[%helm *] =^(c helm.state (take-arvo:helm-core t.wire syn) [c this])
[%kiln *] =^(c kiln.state (take-arvo:kiln-core t.wire syn) [c this])
2020-06-16 10:29:17 +03:00
==
2019-09-05 01:44:22 +03:00
--