Skip to content

Instantly share code, notes, and snippets.

@xynophon
Last active February 28, 2017 02:30
Show Gist options
  • Select an option

  • Save xynophon/a6d7bfaeb24debb9bd548818cf38ac6c to your computer and use it in GitHub Desktop.

Select an option

Save xynophon/a6d7bfaeb24debb9bd548818cf38ac6c to your computer and use it in GitHub Desktop.
Colossus Example
import colossus._
import core._
import service._
import protocols.http._
import UrlParsing._
import HttpMethod._
import akka.actor.ActorSystem
import colossus.task.Task
import com.typesafe.scalalogging.slf4j.LazyLogging
import org.json4s.DefaultFormats
import org.json4s.jackson.Serialization
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
class ColossusService(context: ServerContext) extends HttpService(context) with LazyLogging {
implicit val formats = DefaultFormats
implicit val io = context.server.system
val leavelog = Task.start(new Task(_) {
override def receive = {
case msg: String => logger.info(msg)
}
override def run(): Unit = {}
})
val parse = Task.start(new Task(_) {
override def receive = {
case req: HttpRequest => leavelog ! Serialization.write(req.head.parameters.parameters.map { case (a, b) => (a -> b) }.toMap)
}
override def run(): Unit = {}
})
def getAllParameters(request: HttpRequest): Future[HttpResponse] = Future {
parse ! request
request.ok("ok")
}
def handle = {
case request @ Get on Root / "params" => {
Callback.fromFuture(getAllParameters(request))
}
case request @ Get on Root / "examplepath" => {
Callback.fromFuture(getAllParameters(request))
}
}
}
class ColossusInitializer(worker: WorkerRef) extends Initializer(worker) {
def onConnect = context => new ColossusService(context)
}
object Main extends App {
implicit val actorSystem = ActorSystem()
implicit val io = IOSystem()
Server.start("measurement"){ worker => new ColossusInitializer(worker) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment