diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2017-09-20 11:50:20 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2017-09-20 11:50:20 +0200 |
| commit | 735d5543ed72f0c6cf632b35b3f23323cebcf81b (patch) | |
| tree | ef4c9447a0574510fefdeebc81102237b876da3b /opendc-omega | |
| parent | d21daac5bb79e975706c298cdec8060746eb813e (diff) | |
Allow suspendable processing of message envelopes
This change allows a process to suspend within a receive block.
Diffstat (limited to 'opendc-omega')
| -rw-r--r-- | opendc-omega/src/main/kotlin/nl/atlarge/opendc/kernel/omega/OmegaSimulation.kt | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/opendc-omega/src/main/kotlin/nl/atlarge/opendc/kernel/omega/OmegaSimulation.kt b/opendc-omega/src/main/kotlin/nl/atlarge/opendc/kernel/omega/OmegaSimulation.kt index 65d9dd60..a29f2b08 100644 --- a/opendc-omega/src/main/kotlin/nl/atlarge/opendc/kernel/omega/OmegaSimulation.kt +++ b/opendc-omega/src/main/kotlin/nl/atlarge/opendc/kernel/omega/OmegaSimulation.kt @@ -166,7 +166,7 @@ internal class OmegaSimulation(override val kernel: OmegaKernel, override val to * @param delay The amount of time to wait before processing the message. */ override fun schedule(message: Any, destination: Entity<*>, sender: Entity<*>?, delay: Duration): Receipt { - require(delay > 0) { "The amount of time to delay the message must be a positive number" } + require(delay >= 0) { "The amount of time to delay the message must be a positive number" } val wrapped = MessageContainer(message, clock.now + delay, sender, destination) queue.add(wrapped) return wrapped @@ -257,7 +257,7 @@ internal class OmegaSimulation(override val kernel: OmegaKernel, override val to * @param block The block to process the message with. * @return The processed message. */ - suspend override fun <T> receive(block: Envelope<*>.(Any) -> T): T { + suspend override fun <T> receive(block: suspend Envelope<*>.(Any) -> T): T { val envelope = receiveEnvelope() return block(envelope, envelope.message) } @@ -273,7 +273,7 @@ internal class OmegaSimulation(override val kernel: OmegaKernel, override val to * @param block The block to process the message with. * @return The processed message or `null` if the timeout was reached. */ - suspend override fun <T> receive(timeout: Duration, block: Envelope<*>.(Any) -> T): T? { + suspend override fun <T> receive(timeout: Duration, block: suspend Envelope<*>.(Any) -> T): T? { val receipt = schedule(Timeout, entity, entity, timeout) val envelope = receiveEnvelope() |
