diff --git a/pkg/arvo/app/group-store.hoon b/pkg/arvo/app/group-store.hoon index 57552866a..f61d14569 100644 --- a/pkg/arvo/app/group-store.hoon +++ b/pkg/arvo/app/group-store.hoon @@ -29,7 +29,7 @@ :: Modify the group. Further documented in /sur/group-store.hoon :: :: -/- *group, permission-store +/- *group, permission-store, *contact-view /+ store=group-store, default-agent, verb, dbug, resource |% +$ card card:agent:gall @@ -165,12 +165,15 @@ ^- (quip card _this) ?> (team:title our.bowl src.bowl) =^ cards state - ?+ mark (on-poke:def mark vase) - %noun (poke-noun:gc vase) - :: + ?+ mark (on-poke:def mark vase) + %noun + (poke-noun:gc vase) + :: ?(%group-update %group-action) (poke-group-update:gc !<(update:store vase)) - :: + :: + %import + (poke-import:gc q.vase) == [cards this] :: @@ -214,10 +217,42 @@ (slav %p i.t.t.t.t.t.t.path) ?~ rid ~ ``noun+!>((peek-group-join u.rid ship)) + :: + [%x %export ~] + ``noun+!>(state) == :: - ++ on-agent on-agent:def - ++ on-arvo on-arvo:def + ++ on-agent + |= [=wire =sign:agent:gall] + ^- (quip card _this) + ?. ?=([%try-rejoin @ *] wire) + (on-agent:def wire sign) + ?> ?=(%poke-ack -.sign) + =/ rid=resource (de-path:resource t.t.wire) + ?~ p.sign + =/ =cage + [%pull-hook-action !>([%add entity.rid rid])] + :_ this + [%pass / %agent [our.bowl %group-pull-hook] %poke cage]~ + =/ nack-count=@ud (slav %ud i.t.wire) + =/ wakeup=@da + (add now.bowl (mul ~s1 (bex (min 19 nack-count)))) + :_ this + [%pass wire %arvo %b %wait wakeup]~ + :: + ++ on-arvo + |= [=wire =sign-arvo] + ^- (quip card _this) + ?. ?=([%try-rejoin @ *] wire) + (on-arvo:def wire sign-arvo) + =/ =resource (de-path:resource t.t.wire) + =/ nack-count=@ud (slav %ud i.t.wire) + ?> ?=([%b %wake *] sign-arvo) + ~? ?=(^ error.sign-arvo) + "behn errored in backoff timers, continuing anyway" + :_ this + [(try-rejoin:gc resource +(nack-count))]~ + :: ++ on-fail on-fail:def -- :: @@ -226,7 +261,7 @@ |= rid=resource ^- (unit group) (~(get by groups) rid) - +:: ++ peek-group-join |= [rid=resource =ship] =/ ugroup @@ -246,6 +281,39 @@ (~(has in ban-ranks.policy) (clan:title ship)) == == +:: +++ poke-import + |= arc=* + ^- (quip card _state) + =/ sty=state-one ;;(state-one arc) + :_ sty + %+ roll ~(tap by groups.sty) + |= [[=resource =group] out=(list card)] + ?: =(entity.resource our.bol) + %+ weld out + %+ roll ~(tap in members.group) + |= [recipient=@p out=(list card)] + ?: =(recipient our.bol) + out + :_ out + %- poke-contact + :* %invite resource recipient + (crip "Rejoin disconnected group {}/{}") + == + :_ out + (try-rejoin resource 0) +:: +++ try-rejoin + |= [rid=resource nack-count=@ud] + ^- card + =/ =cage + :- %group-update + !> ^- update:store + [%add-members rid (sy our.bol ~)] + =/ =wire + [%try-rejoin (scot %ud nack-count) (en-path:resource rid)] + [%pass wire %agent [entity.rid %group-push-hook] %poke cage] +:: ++ poke-noun |= =vase ^- (quip card _state) @@ -604,6 +672,11 @@ |= =action:store ^- card [%pass / %agent [our.bol %group-store] %poke %group-action !>(action)] +:: +++ poke-contact + |= act=contact-view-action + ^- card + [%pass / %agent [our.bol %contact-view] %poke %contact-view-action !>(act)] :: +send-diff: update subscribers of new state :: :: We only allow subscriptions on /groups diff --git a/pkg/arvo/lib/pull-hook.hoon b/pkg/arvo/lib/pull-hook.hoon index cb3b5e6f7..eb91242e7 100644 --- a/pkg/arvo/lib/pull-hook.hoon +++ b/pkg/arvo/lib/pull-hook.hoon @@ -196,6 +196,7 @@ =. inner-state on-save:og !>(state) + :: ++ on-poke |= [=mark =vase] ^- [(list card:agent:gall) agent:gall]