blob: 25f1154d93d118ef7e23c2857e46bb43b9d0c66f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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);
}
}
}
|