package com.tylerstonge.honeypot import java.nio.file.Paths import akka.actor.{Actor, Props} import akka.event.{Logging, LoggingAdapter} import com.tylerstonge.honeypot.ftp.FtpListener import com.tylerstonge.honeypot.messages.MStartComponent import org.typelevel.jawn.ast.{JArray, JParser} class Supervisor extends Actor { val log: LoggingAdapter = Logging(context.system, this) override def preStart: Unit = { val cfg = JParser.parseFromFile(Paths.get("config.json").toFile).get cfg.get("components").asInstanceOf[JArray].vs.foreach(c => { self ! MStartComponent(c.get("name").asString, c.get("type").asString, c.get("port").asInt) }) } override def postStop { log.debug("supervisor is shutting down") } override def receive: Receive = { case msg: MStartComponent => startComponent(msg) case _ => log.debug("supervisor received unhandled message") } private def startComponent(msg: MStartComponent) { log.info("starting component :: {}", msg.name) msg.ctype match { case "ftp" => context.actorOf(FtpListener.props(msg.port), name = msg.name) case _ => log.error("unknown component type: ", msg.ctype, msg.name); } } }