Skip to content

Instantly share code, notes, and snippets.

@gnufied
Created March 13, 2009 07:31
Show Gist options
  • Save gnufied/78470 to your computer and use it in GitHub Desktop.
Save gnufied/78470 to your computer and use it in GitHub Desktop.
package new_job
import scala.actors.{Actor}
import java.io.File
import scala.actors.Actor._
case class Job(folder: File, index: Int)
class MyScheduler(var jobs: List[Job]) extends Actor {
var done = List[Job]()
var scheduled = List[Job]()
def act() = loop {
receive {
case worker: Worker => next(worker)
case (worker: Worker,job: Job) => {
println("Job is done : " + job)
done = job :: done
scheduled = scheduled - job
next(worker)
}
case x => println(x)
}
}
def next(worker: Actor) = if(jobs.isEmpty) {
worker ! "done"
if(scheduled.isEmpty) {
println("All work is done " + done.length)
exit()
}
} else {
val t_job = jobs.head
jobs = jobs.tail
scheduled = t_job :: scheduled
worker ! t_job
}
}
class Worker(val index: Int) extends Actor {
def act() = loop {
receive {
case "done" => exit()
case job: Job => {
println("actor " + index + " starting job: " + job)
Thread.sleep(0)
reply((this, job))
}
}
}
start()
}
object App {
def main(args: Array[String]) = {
val jobs = Job(new File("."), 3) :: Job(new File("."), 4) :: Job(new File("."), 5) :: Job(new File("."), 333) :: Job(new File("."), 234) :: Nil
val scheduler = new MyScheduler(jobs)
scheduler.start()
for(i <- 1 to 3) scheduler ! new Worker(i)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment