import akka.actor._;
case class OrderMessage(orderId: String)
case class InvoiceMessage(orderId: String, invoiceId: String)
class OrderingSystem(dispatcher: ActorRef) extends Actor {
var orderCount = 0;
def receive = {
case InvoiceMessage(ordeId, invoiceId) =>
println("<- Receved invoice " + invoiceId + " for the order " + ordeId)
case OrderMessage =>
println("== Placing order")
orderCount += 1
dispatcher ! OrderMessage("ORDER-" + orderCount)
}
}
class DispatchSystem extends Actor {
var invoiceCount = 0;
def receive = {
case OrderMessage(ordeId) =>
println("-> Receved order " + ordeId)
println("==> Dispatching the order " + ordeId)
Thread.sleep(3000)
invoiceCount += 1
sender ! InvoiceMessage(ordeId, "INV-" + invoiceCount)
case _ =>
}
}
object OrderPlacementSystem extends App {
val system = ActorSystem("OrderPlacement")
val dispatcher = system.actorOf(Props[DispatchSystem], name = "dispatcher")
val ordering = system.actorOf(Props(new OrderingSystem(dispatcher)), name = "order-placer")
(1 to 5).map(x => ordering ! OrderMessage) //place 5 orders
}