urbit/pkg/arvo/mar/sole/effect.hoon
fang f285c7954e
sole: add %bye effect for closing the session
This lets applications suggest to the client that they should gracefully
unsubscribe from the session.

Arguably this might be accomplished by %kick-ing the client and then
crashing on their subsequent resubscribe, but this requires tracking
their sole session id and has less semantic clarity on what's happening.
2020-12-15 16:56:47 +01:00

83 lines
1.8 KiB
Plaintext

::
:::: /hoon/effect/sole/mar
::
/? 310
/- sole
!:
::
::::
::
=, sole
=, format
|%
++ mar-sole-change :: XX dependency
|_ cha=sole-change
++ grow
|% ++ json
^- ^json
=, enjs
=; edi
=,(cha (pairs ted+(edi ted) ler+a+~[(numb own.ler) (numb his.ler)] ~))
|= det=sole-edit
?- -.det
%nop [%s 'nop']
%mor [%a (turn p.det ..$)]
%del (frond %del (numb p.det))
%set (frond %set (tape (tufa p.det)))
%ins (frond %ins (pairs at+(numb p.det) cha+s+(tuft q.det) ~))
==
--
--
++ wush
|= [wid=@u tan=tang]
^- tape
(of-wall (turn (flop tan) |=(a=tank (of-wall (wash 0^wid a)))))
::
++ purge :: discard ++styx style
|= a=styx ^- tape
%- zing %+ turn a
|= a=_?>(?=(^ a) i.a)
?@(a (trip a) ^$(a q.a))
--
::
|_ sef=sole-effect
::
++ grad %noun
++ grab :: convert from
|%
++ noun sole-effect :: clam from %noun
--
++ grow
=, enjs
|%
++ noun sef
++ json
^- ^json
?+ -.sef
~|(unsupported-effect+-.sef !!)
%mor [%a (turn p.sef |=(a=sole-effect json(sef a)))]
%err (frond %hop (numb p.sef))
%txt (frond %txt (tape p.sef))
%tan (frond %tan (tape (wush 160 p.sef)))
%det (frond %det json:~(grow mar-sole-change +.sef))
::
%pro
%+ frond %pro
(pairs vis+b+vis.sef tag+s+tag.sef cad+(tape (purge cad.sef)) ~)
::
%tab
:- %a
%+ turn p.sef
|= [=cord =^tank]
%+ frond %tab
%- pairs
:~ match+s+cord
info+(tape ~(ram re tank))
==
::
?(%bel %clr %nex %bye)
(frond %act %s -.sef)
==
--
--