Skip to content

Instantly share code, notes, and snippets.

@jto
Created April 23, 2012 21:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jto/2474137 to your computer and use it in GitHub Desktop.
Save jto/2474137 to your computer and use it in GitHub Desktop.
Funky enumerator usage
package controllers
import play.api._
import play.api.mvc._
import play.api.libs.ws._
import play.api.libs.iteratee._
import play.api.libs.concurrent._
object Application extends Controller {
val EXPECTED_LENGTH = 15;
def index = Action {
val p1 = WS.url("http://linkedin.com").get().map{ _ => "linkedin" }
val p2 = WS.url("http://zenexity.com").get().map{ _ => "zenexity" }
val p3 = WS.url("http://news.ycombinator.com").get().map{ _ => "ycombinator" }
val r = (Enumerator.flatten(p1.map( r => Enumerator(r:_*))) >-
Enumerator.flatten(p2.map( r => Enumerator(r:_*))) >-
Enumerator.flatten(p3.map( r => Enumerator(r:_*))) &>
Enumeratee.take(EXPECTED_LENGTH)) >>>
Enumerator.enumInput(Input.EOF) |>>
Iteratee.fold(List[Char]()){ (es, e: Char) => println(e); e :: es }
val p = r.flatMap( _.pureFold(
(res, _) => Ok(res.reverse.mkString),
_ => NotImplemented,
(err, _) => InternalServerError(err.toString)))
AsyncResult(p)
}
}
val r = (Enumerator.flatten(p1.map( r => Enumerator(r:_*))) interleave
Enumerator.flatten(p2.map( r => Enumerator(r:_*))) interleave
Enumerator.flatten(p3.map( r => Enumerator(r:_*))) through
Enumeratee.take(EXPECTED_LENGTH)) andThen
Enumerator.enumInput(Input.EOF) apply
Iteratee.fold(List[Char]()){ (es, e: Char) => println(e); e :: es }
val r = Enumerator.flatten(p1.map( r => Enumerator(r:_*)))
.interleave(Enumerator.flatten(p2.map( r => Enumerator(r:_*))))
.interleave(Enumerator.flatten(p3.map( r => Enumerator(r:_*))))
.through(Enumeratee.take(EXPECTED_LENGTH))
.andThen(Enumerator.enumInput(Input.EOF))
.apply(Iteratee.fold(List[Char]()){ (es, e: Char) => println(e); e :: es })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment