Created
March 13, 2009 07:32
-
-
Save gnufied/78471 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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