diff --git a/src/syndicate/actors.nim b/src/syndicate/actors.nim index a58a130..a9bba70 100644 --- a/src/syndicate/actors.nim +++ b/src/syndicate/actors.nim @@ -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)