Skip to content

Instantly share code, notes, and snippets.

@casualjim
Created April 11, 2011 09:47
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save casualjim/913295 to your computer and use it in GitHub Desktop.
Save casualjim/913295 to your computer and use it in GitHub Desktop.
package com.mojolly.backchat
package web
import org.scalatra.ScalatraServlet
import akka.actor.{Scheduler, Actor}
import javax.servlet.http.{HttpServletResponse, HttpServletRequest}
import org.atmosphere.cpr.BroadcastFilter.BroadcastAction
import org.atmosphere.cpr._
import org.atmosphere.util.XSSHtmlFilter
import collection.JavaConversions._
import java.util.concurrent.{LinkedBlockingQueue, TimeUnit}
import collection.mutable.{ListBuffer, Queue, LinkedList}
case class AtmoCallback(callback: String => Unit)
class EventsLogger extends AtmosphereResourceEventListener with Logging {
def onThrowable(event: AtmosphereResourceEvent[HttpServletRequest, HttpServletResponse]) {
log info ("onThrowable(): %s", event)
}
def onBroadcast(event: AtmosphereResourceEvent[HttpServletRequest, HttpServletResponse]) {
log info ("onBroadcast(): %s", event)
}
def onDisconnect(event: AtmosphereResourceEvent[HttpServletRequest, HttpServletResponse]) {
log info ("onDisconnect(): %s", event)
}
def onResume(event: AtmosphereResourceEvent[HttpServletRequest, HttpServletResponse]) {
log info ("onResume(): %s", event)
}
def onSuspend(event: AtmosphereResourceEvent[HttpServletRequest, HttpServletResponse]) {
log info ("onSuspend(): %s", event)
}
}
class AtmoActor() extends Actor {
protected def receive = {
case s: String => {
val b = BroadcasterFactory.getDefault.lookup(classOf[DefaultBroadcaster], "the_stream")
b.broadcast(s)
}
case 'init => {
Scheduler.schedule(self, "the time: " + DateTime.now.toString(RFC2822_DATE), 500, 500, TimeUnit.MILLISECONDS)
}
}
}
class AtmoServlet extends ScalatraServlet {
val act = Actor.actorOf(new AtmoActor).start
get("/the_stream") {
val m: Meteor = Meteor.build(request)
m.addListener(new EventsLogger())
val b = new DefaultBroadcaster("the_stream")
b.setScope(Broadcaster.SCOPE.REQUEST)
m.setBroadcaster(b)
act ! 'init
m.suspend(-1, false)
""
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment