// Example Scala file for source-highlight.

case class Point(x: Double, y: Double)  

abstract case class Shape { def draw(): Unit = println(this) }  
case class Circle(center: Point, radius: Double) extends Shape  
case class Rectangle(lowerLeft: Point, height: Double, width: Double) extends Shape

import scala.actors._  
import scala.actors.Actor._  

object ShapeDrawer extends Actor {  
    def act() {  
        loop {   
            receive {  
                case s: Shape => s.draw()  
                case "exit"   => { println("exiting..."); exit }  
                case x: Any   => println("Error: Unknown message! " + x)
            }
        }
    }
}

ShapeDrawer.start() 
ShapeDrawer ! Circle(Point(0.0,0.0), 1.0)     
ShapeDrawer ! Rectangle(Point(0.0,0.0), 2, 5) 
ShapeDrawer ! 3.14159  
ShapeDrawer ! "exit"   

// Output:
// => Circle(Point(0.0,0.0),1.0)
// => Rectangle(Point(0.0,0.0),2.0,5.0)
// => Error: Unknown message! 3.14159
// => exiting...

Server.fork;