Newer
Older
weather-servlet / src / main / scala / uk / org / floop / msc / comet / WeatherActor.scala
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)
  }
}