Skip to content

Instantly share code, notes, and snippets.

@patriknw
Created February 18, 2013 21:09
Show Gist options
  • Save patriknw/4980766 to your computer and use it in GitHub Desktop.
Save patriknw/4980766 to your computer and use it in GitHub Desktop.
Inspiration for Akka mailing list question
import akka.actor._
object MessageDiscarder {
case object WorkerAvailable
}
class MessageDiscarder extends Actor {
import MessageDiscarder._
var queued: Option[(Any, ActorRef)] = None
def receive = {
case WorkerAvailable =>
queued match {
case Some((msg, snd)) =>
sender.tell(msg, snd)
queued = None
case None =>
context.become(idle(sender), discardOld = false)
}
case msg =>
queued = Some((msg, sender))
}
def idle(worker: ActorRef): Actor.Receive = {
case msg =>
worker.tell(msg, sender)
context.unbecome()
}
}
class SampleWorker(discarder: ActorRef) extends Actor {
import MessageDiscarder._
discarder ! WorkerAvailable
def receive = {
case msg =>
println("work: " + msg)
// note that this is the original sender
sender ! "done"
discarder ! WorkerAvailable
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment