From 1f77d1011577c54e98ad0cbbd898817f98000881 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Wed, 8 May 2019 11:42:05 +0200 Subject: feat: Add support for spawning anonymous children This change adds support for spawning anonymous children in an ActorContext. This means a name does not have to be specified when spawning an actor. --- .../com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'odcsim-engine-omega/src') diff --git a/odcsim-engine-omega/src/main/kotlin/com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt b/odcsim-engine-omega/src/main/kotlin/com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt index 8930fb96..37b5395f 100644 --- a/odcsim-engine-omega/src/main/kotlin/com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt +++ b/odcsim-engine-omega/src/main/kotlin/com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt @@ -38,10 +38,10 @@ import com.atlarge.odcsim.Signal import com.atlarge.odcsim.Terminated import com.atlarge.odcsim.internal.BehaviorInterpreter import com.atlarge.odcsim.internal.logging.LoggerImpl -import com.sun.xml.internal.messaging.saaj.soap.impl.EnvelopeImpl import org.slf4j.Logger import java.util.Collections import java.util.PriorityQueue +import java.util.UUID import java.util.WeakHashMap import kotlin.math.max @@ -155,6 +155,16 @@ class OmegaActorSystem(root: Behavior, override val name: String) override fun send(ref: ActorRef, msg: U, after: Duration) = schedule(ref, msg, after) override fun spawn(behavior: Behavior, name: String): ActorRef { + require(!name.startsWith("$")) { "Name may not start with $-sign" } + return internalSpawn(behavior, name) + } + + override fun spawnAnonymous(behavior: Behavior): ActorRef { + val name = "$" + UUID.randomUUID() + return internalSpawn(behavior, name) + } + + private fun internalSpawn(behavior: Behavior, name: String): ActorRef { val ref = ActorRefImpl(this@OmegaActorSystem, self.path.child(name)) if (ref.path !in registry) { val actor = Actor(ref, behavior) -- cgit v1.2.3