diff options
author | Philipp Haller <hallerp@gmail.com> | 2007-04-30 14:25:57 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2007-04-30 14:25:57 +0000 |
commit | 9227a0f86a22aba48f069c8d52d6c587d05d05f9 (patch) | |
tree | 6a9dab95c84cbb0bf62cbbd499d3b278c6dfaf6a | |
parent | 7f27845c6d16c9dcc15cf90c780ac4fd596a4f4f (diff) | |
download | scala-9227a0f86a22aba48f069c8d52d6c587d05d05f9.tar.gz scala-9227a0f86a22aba48f069c8d52d6c587d05d05f9.tar.bz2 scala-9227a0f86a22aba48f069c8d52d6c587d05d05f9.zip |
Removed obsolete example.
-rw-r--r-- | docs/examples/auction.scala | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/docs/examples/auction.scala b/docs/examples/auction.scala deleted file mode 100644 index a7d5119aae..0000000000 --- a/docs/examples/auction.scala +++ /dev/null @@ -1,143 +0,0 @@ -package examples - -import java.util.Date -import scala.concurrent._ - -/** A simple demonstrator program implementing an online auction service - * The example uses the actor abstraction defined in the API of - * package scala.concurrent. - */ -trait AuctionMessage -case class Offer(bid: int, client: Actor) extends AuctionMessage // make a bid -case class Inquire(client: Actor) extends AuctionMessage // inquire status - -trait AuctionReply -case class Status(asked: int, expiration: Date) // asked sum, expiration date - extends AuctionReply -case class BestOffer() extends AuctionReply // yours is the best offer -case class BeatenOffer(maxBid: int) extends AuctionReply // offer beaten by maxBid -case class AuctionConcluded(seller: Actor, client: Actor) // auction concluded - extends AuctionReply -case class AuctionFailed() extends AuctionReply // failed with no bids -case class AuctionOver() extends AuctionReply // bidding is closed - -class Auction(seller: Actor, minBid: int, closing: Date) extends Actor { - - val timeToShutdown = 3600000 // msec - val bidIncrement = 10 - - override def run() = { - var maxBid = minBid - bidIncrement - var maxBidder: Actor = null - var running = true - - while (running) { - receiveWithin (closing.getTime() - new Date().getTime()) { - - case Offer(bid, client) => - if (bid >= maxBid + bidIncrement) { - if (maxBid >= minBid) - maxBidder send BeatenOffer(bid); - maxBid = bid - maxBidder = client; - client send BestOffer() - } - else - client send BeatenOffer(maxBid) - - case Inquire(client) => - client send Status(maxBid, closing) - - case TIMEOUT => - if (maxBid >= minBid) { - val reply = AuctionConcluded(seller, maxBidder) - maxBidder send reply - seller send reply - } - else - seller send AuctionFailed() - receiveWithin(timeToShutdown) { - case Offer(_, client) => client send AuctionOver() - case TIMEOUT => running = false - } - - } - } - } -} - -// ---- Test ------------------------------------------------------------- - -object auction { - - val random = new java.util.Random() - - val minBid = 100 - val closing = new Date(new Date().getTime() + 60000) - - val seller = new Actor { - override def run() = {} - } - val auction = new Auction(seller, minBid, closing) - - def client(i: int, increment: int, top: int) = new Actor { - val name = "Client " + i - def log(msg: String) = Console.println(name + ": " + msg) - var running = true - var max: int = _ - var current: int = 0 - override def run() = { - log("started") - auction send Inquire(this) - receive { - case Status(maxBid, _) => { - log("status(" + maxBid + ")") - max = maxBid - } - } - while (running) { - if (max >= top) - log("too high for me") - else if (current < max) { - current = max + increment - Thread.sleep(1 + random.nextInt(1000)) - auction send Offer(current, this) - } - receive { - case BestOffer() => { - log("bestOffer(" + current + ")") - } - case BeatenOffer(maxBid) => { - log("beatenOffer(" + maxBid + ")") - max = maxBid - } - case AuctionConcluded(seller, maxBidder) => { - log("auctionConcluded") - } - case AuctionOver() => { - running = false - log("auctionOver") - } - } - } - } - } - - def kill(delay: Int) = new java.util.Timer().schedule( - new java.util.TimerTask { - override def run() = { - Console.println("[killed]") - System.exit(0) - } - }, - delay) // in milliseconds - - def main(args: Array[String]) = { - seller.start() - auction.start() - client(1, 20, 200).start() - client(2, 10, 300).start() - kill(20000) - } - -} |