Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
long-polling seems to kind of work
  • Loading branch information
casualjim committed Mar 13, 2013
1 parent 663cb18 commit 7a17d92
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 9 deletions.
Expand Up @@ -142,8 +142,8 @@ trait AtmosphereSupport extends Initializable with Handler with CometProcessor w
}

private[this] def configureBroadcasterCache() {
if (atmosphereFramework.getBroadcasterCacheClassName.isBlank)
atmosphereFramework.setBroadcasterCacheClassName(classOf[UUIDBroadcasterCache].getName)
// if (atmosphereFramework.getBroadcasterCacheClassName.isBlank)
// atmosphereFramework.setBroadcasterCacheClassName(classOf[UUIDBroadcasterCache].getName)
}

private[atmosphere] val Atmosphere: RouteTransformer = route => route.copy(metadata = route.metadata + ('Atmosphere -> 'Atmosphere))
Expand Down
Expand Up @@ -33,8 +33,8 @@ object ScalatraAtmosphereHandler {

def onDisconnect(event: AtmosphereResourceEvent) {
logger.debug("disconnecting: " + event.getResource.uuid() + " on " + event.getResource.transport())
val disconnector = if (event.isCancelled) ClientDisconnected else ServerDisconnected
if (!event.getResource.isResumed) event.getResource.clientOption foreach (_.receive.lift(Disconnected(disconnector, Option(event.throwable))))
// val disconnector = if (event.isCancelled) ClientDisconnected else ServerDisconnected
// if (!event.getResource.isResumed) event.getResource.clientOption foreach (_.receive.lift(Disconnected(disconnector, Option(event.throwable))))
activeClients -= event.getResource.uuid()

}
Expand Down Expand Up @@ -72,21 +72,23 @@ class ScalatraAtmosphereHandler(implicit wireFormat: WireFormat) extends Abstrac
internalLogger.debug("This is a new client? " + isNew)

(req.requestMethod, route.isDefined) match {
case (Post, true) =>
case (Post, _) =>
internalLogger.debug("This is a post request")
clientOption map { client =>
client.resource = resource
// client.resource = resource // => makes it so that the broadcaster is wrong, it works without this too
handleIncomingMessage(req, client)
}
case (Get, true) =>
internalLogger.debug("This is a get request")
if (isNew) {
createClient(route.get, resource).receive.lift(Connected)
createClient(route.get, resource) //.receive.lift(Connected)
}

addEventListener(resource)
resumeIfNeeded(resource)
configureBroadcaster(resource)
// resource.getResponse.getAsyncIOWriter.write(resource.uuid).flush()
resource.suspend()
resource.suspend
case _ =>
val ex = new ScalatraAtmosphereException("There is no atmosphere route defined for " + req.getRequestURI)
internalLogger.warn(ex.getMessage, ex)
Expand Down
Expand Up @@ -16,7 +16,7 @@ final class ScalatraBroadcaster(name: String, uri: URI, config: AtmosphereConfig

def broadcast[T <: OutboundMessage](msg: T, clientFilter: ClientFilter): Future[T] = {
logger.debug("There are %s resources in the [%s] broadcaster.".format(resources.size(), name))
val selectedResources = resources.asScala map (_.client) filter clientFilter
val selectedResources = (resources.asScala map (_.clientOption)).flatten filter clientFilter
logger.info("Sending %s to %s".format(msg, selectedResources.map(_.uuid)))
broadcast(wireFormat.render(msg), selectedResources.map(_.resource).toSet.asJava).map(_ => msg)
}
Expand Down

0 comments on commit 7a17d92

Please sign in to comment.