blob: ee41ea24222919f30c5e92655d9cb190abfef506 (
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
|
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(Props(new FtpListener(msg.port)), name = msg.name)
case _ => log.error("unknown component type: ", msg.ctype, msg.name);
}
}
}
|