summaryrefslogtreecommitdiff
path: root/opendc-omega
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2017-09-20 11:50:20 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2017-09-20 11:50:20 +0200
commit735d5543ed72f0c6cf632b35b3f23323cebcf81b (patch)
treeef4c9447a0574510fefdeebc81102237b876da3b /opendc-omega
parentd21daac5bb79e975706c298cdec8060746eb813e (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.kt6
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()