diff --git a/app/cli/src/main/scala/org/bitcoins/cli/ConsoleCli.scala b/app/cli/src/main/scala/org/bitcoins/cli/ConsoleCli.scala index 740cd0f2be..68a77a75bd 100644 --- a/app/cli/src/main/scala/org/bitcoins/cli/ConsoleCli.scala +++ b/app/cli/src/main/scala/org/bitcoins/cli/ConsoleCli.scala @@ -148,6 +148,9 @@ object ConsoleCli { cmd("getpeers") .action((_, conf) => conf.copy(command = GetPeers)) .text(s"List the connected peers"), + cmd("stop") + .action((_, conf) => conf.copy(command = Stop)) + .text("Request a graceful shutdown of Bitcoin-S"), note(sys.props("line.separator") + "=== PSBT ==="), cmd("combinepsbts") .action((_, conf) => conf.copy(command = CombinePSBTs(Seq.empty))) @@ -275,6 +278,7 @@ object ConsoleCli { case GetBestBlockHash => RequestParam("getbestblockhash") // peers case GetPeers => RequestParam("getpeers") + case Stop => RequestParam("stop") // PSBTs case CombinePSBTs(psbts) => RequestParam("combinepsbts", Seq(up.writeJs(psbts))) @@ -386,6 +390,7 @@ object CliCommand { // Node case object GetPeers extends CliCommand + case object Stop extends CliCommand // Chain case object GetBestBlockHash extends CliCommand diff --git a/app/server/src/main/scala/org/bitcoins/server/NodeRoutes.scala b/app/server/src/main/scala/org/bitcoins/server/NodeRoutes.scala index fd1c5f6c56..10affc5650 100644 --- a/app/server/src/main/scala/org/bitcoins/server/NodeRoutes.scala +++ b/app/server/src/main/scala/org/bitcoins/server/NodeRoutes.scala @@ -8,12 +8,22 @@ import org.bitcoins.node.Node case class NodeRoutes(node: Node)(implicit system: ActorSystem) extends ServerRoute { - implicit val materializer = ActorMaterializer() + import system.dispatcher + implicit val materializer: ActorMaterializer = ActorMaterializer() def handleCommand: PartialFunction[ServerCommand, StandardRoute] = { case ServerCommand("getpeers", _) => complete { Server.httpSuccess("TODO implement getpeers") } + + case ServerCommand("stop", _) => + complete { + val nodeStopping = node.stop().map { _ => + Server.httpSuccess("Node shutting down") + } + system.terminate() + nodeStopping + } } }