Implement base method of sync

This commit is contained in:
Emery Hemingway 2024-04-24 16:12:49 +02:00
parent c99f0a60ab
commit 7e15b37f44
1 changed files with 11 additions and 5 deletions

View File

@ -144,11 +144,6 @@ when tracing:
result.facet = cap.target.facet.id
result.oid = cap.target.oid.toPreserves
method publish*(e: Entity; turn: var Turn; v: AssertionRef; h: Handle) {.base.} = discard
method retract*(e: Entity; turn: var Turn; h: Handle) {.base.} = discard
method message*(e: Entity; turn: var Turn; v: AssertionRef) {.base.} = discard
method sync*(e: Entity; turn: var Turn; peer: Cap) {.base.} = discard
converter toActor(f: Facet): Actor = f.actor
converter toActor(t: Turn): Actor = t.facet.actor
converter toFacet(a: Actor): Facet = a.root
@ -367,6 +362,8 @@ proc runRewrites*(a: Attenuation; v: Value): Value =
result = examineAlternatives(stage, result)
if result.isFalse: break
method publish*(e: Entity; turn: var Turn; v: AssertionRef; h: Handle) {.base.} = discard
proc publish(turn: var Turn; cap: Cap; v: Value; h: Handle) =
var a = runRewrites(cap.attenuation, v)
if not a.isFalse:
@ -395,6 +392,8 @@ proc publish*(turn: var Turn; r: Cap; a: Value): Handle {.discardable.} =
proc publish*[T](turn: var Turn; r: Cap; a: T): Handle {.discardable.} =
publish(turn, r, a.toPreserves)
method retract*(e: Entity; turn: var Turn; h: Handle) {.base.} = discard
proc retract(turn: var Turn; e: OutboundAssertion) =
when tracing:
var act = initEnqueue(turn, e.peer)
@ -413,6 +412,8 @@ proc retract*(turn: var Turn; h: Handle) =
if turn.facet.outbound.pop(h, e):
turn.retract(e)
method message*(e: Entity; turn: var Turn; v: AssertionRef) {.base.} = discard
proc message*(turn: var Turn; r: Cap; v: Value) =
var a = runRewrites(r.attenuation, v)
if not a.isFalse:
@ -430,6 +431,11 @@ proc message*(turn: var Turn; r: Cap; v: Value) =
proc message*[T](turn: var Turn; r: Cap; v: T) =
message(turn, r, v.toPreserves)
method sync*(e: Entity; turn: var Turn; peer: Cap) {.base.} =
queueTurn(e.facet) do (turn: var Turn):
message(turn, peer, true.toPreserves)
# complete sync on a later turn
proc sync*(turn: var Turn; r, peer: Cap) =
when tracing:
var act = initEnqueue(turn, peer)