Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import akka.actor.{ActorSystem, Props, Actor, Inbox}
- import akka.pattern.{ask, pipe}
- import akka.util.Timeout
- import scala.concurrent.duration._
- import scala.concurrent._
- import scala.concurrent.ExecutionContext.Implicits.global
- // import scala.concurrent.duration._
- case class QSTask(data: Vector[Int])
- class QuicksortActor extends Actor {
- val qsAct = context.self
- implicit val timeout = Timeout(5.seconds)
- def receive = {
- case QSTask(Vector()) => sender ! Vector()
- case QSTask(Vector(x)) => sender ! Vector(x)
- case QSTask(d +: ds) => {
- val (la, lb) = ds partition (_ < d)
- val fsort = Future.sequence(
- List(qsAct ? QSTask(la), qsAct ? QSTask(lb))
- ).mapTo[List[Vector[Int]]]
- fsort map { case List(sa, sb) => sa ++: d +: sb } pipeTo sender
- }
- }
- }
- object FiboAkkaMain extends App {
- val system = ActorSystem("helloakka")
- val qsAct = system.actorOf(Props[QuicksortActor], "qsAct")
- val inbox = Inbox.create(system)
- inbox.send(qsAct, QSTask(Vector(45, 23, 72, 35, 19, 66, 23, 65, 34, 17, 82, 81, 49, 21, 62)))
- println(inbox.receive(5.seconds))
- }
- // output:
- // Vector(17, 19, 21, 23, 23, 34, 35, 45, 49, 62, 65, 66, 72, 81, 82)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement