package uk.org.floop.msc.comet import scala.collection.mutable.HashMap import net.liftweb.http._ import net.liftweb.http.js.JsCmds._ import uk.org.floop.msc.rrd._ class WeatherActor(info: CometActorInitInfo) extends CometActor(info) { def defaultPrefix = "weather" var currentWeather: List[Pair[String, Any]] = Nil val currentWeatherMap = new HashMap[String, Any]() def render: RenderOut = { new RenderOut(bind("view" -> <table> {currentWeather.map(pair => <tr><td>{pair._1}</td><td>{pair._2}</td></tr> )} </table>), currentWeatherMap.get("windDir") match { case Some(angle) => Run("drawCompass(" + angle + ")") case None => Noop } ) } override def localSetup { DataStore !? AddWeatherListener(this) match { case CurrentWeather(w) => currentWeather = w w.foreach(pair => currentWeatherMap(pair._1) = pair._2) } } override def localShutdown { DataStore ! RemoveWeatherListener(this) } override def lowPriority: PartialFunction[Any, Unit] = { case CurrentWeather(w) => val diff = w -- currentWeather diff.foreach(pair => currentWeatherMap(pair._1) = pair._2) currentWeather = w reRender(false) } }