Last active
February 28, 2017 02:30
-
-
Save xynophon/a6d7bfaeb24debb9bd548818cf38ac6c to your computer and use it in GitHub Desktop.
Colossus Example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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