Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@maoe
Created July 13, 2010 05:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maoe/473497 to your computer and use it in GitHub Desktop.
Save maoe/473497 to your computer and use it in GitHub Desktop.
import scala.actors._
import scala.actors.Actor._
import java.net.InetAddress
sealed abstract class DnsMessage
case class DnsRequest(name: String, sender: Actor) extends DnsMessage
case class DnsResponse(name: String, address: Option[InetAddress]) extends DnsMessage
class DnsResolver extends Actor {
def act() {
react {
case DnsRequest(name, sender) =>
sender ! handleDnsRequest(name)
}
}
def handleDnsRequest(name: String): DnsResponse = {
try {
DnsResponse(name, Some(InetAddress.getByName(name)))
} catch {
case _: Exception =>
DnsResponse(name, None)
}
}
}
object DnsPrinter extends Actor {
def act() {
loop {
react {
case DnsResponse(name, address) =>
println(name + ": "+ address)
case Exit => exit()
}
}
}
}
object Main {
def main(args: Array[String]) {
val names: List[String] = List(
"www.hatena.ne.jp",
"d.hatena.ne.jp",
"www.google.co.jp",
"foo.bar.baz"
)
DnsPrinter.start()
for (name <- names) {
val resolver = (new DnsResolver).start()
resolver ! DnsRequest(name, DnsPrinter)
}
Thread.sleep(1000)
DnsPrinter ! Exit
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment