1
0
mirror of https://github.com/ACINQ/eclair.git synced 2024-11-19 09:54:02 +01:00

merged from wip-akka-http

This commit is contained in:
pm47 2016-04-29 14:51:45 +02:00
commit 30fb6c18eb
4 changed files with 23 additions and 37 deletions

View File

@ -58,6 +58,16 @@
<artifactId>akka-slf4j_${scala.version.short}</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-http-core_${scala.version.short}</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-http-experimental_${scala.version.short}</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>fr.acinq</groupId>
<artifactId>bitcoin-lib_${scala.version.short}</artifactId>
@ -84,16 +94,6 @@
<groupId>com.trueaccord.lenses</groupId>
<artifactId>lenses_${scala.version.short}</artifactId>
</dependency>
<dependency>
<groupId>io.spray</groupId>
<artifactId>spray-routing_${scala.version.short}</artifactId>
<version>${spray.version}</version>
</dependency>
<dependency>
<groupId>io.spray</groupId>
<artifactId>spray-can_${scala.version.short}</artifactId>
<version>${spray.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>

View File

@ -3,16 +3,16 @@ package fr.acinq.eclair
import java.net.InetSocketAddress
import akka.actor.{ActorRef, ActorSystem, Props}
import akka.io.IO
import akka.http.scaladsl.Http
import akka.http.scaladsl.server.Directives._
import akka.util.Timeout
import akka.stream.ActorMaterializer
import com.typesafe.config.ConfigFactory
import fr.acinq.eclair.api.ServiceActor
import fr.acinq.eclair.api.Service
import fr.acinq.eclair.blockchain.{ExtendedBitcoinClient, PollingWatcher}
import fr.acinq.eclair.channel.Register
import fr.acinq.eclair.io.{Client, Server}
import grizzled.slf4j.Logging
import spray.can.Http
import scala.concurrent.{Await, ExecutionContext}
import scala.concurrent.duration._
import Globals._
@ -23,6 +23,7 @@ import Globals._
object Boot extends App with Logging {
implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
implicit val timeout = Timeout(30 seconds)
implicit val formats = org.json4s.DefaultFormats
implicit val ec = ExecutionContext.Implicits.global
@ -38,12 +39,11 @@ object Boot extends App with Logging {
val register = system.actorOf(Props[Register], name = "register")
val server = system.actorOf(Server.props(config.getString("eclair.server.address"), config.getInt("eclair.server.port")), "server")
val api = system.actorOf(Props(new ServiceActor {
val api = new Service {
override val register: ActorRef = Boot.register
override def connect(addr: InetSocketAddress, amount: Long): Unit = system.actorOf(Props(classOf[Client], addr, amount))
}), "api")
}
Http().bindAndHandle(api.route, config.getString("eclair.api.address"), config.getInt("eclair.api.port"))
// start a new HTTP server on port 8080 with our service actor as the handler
IO(Http) ! Http.Bind(api, config.getString("eclair.api.address"), config.getInt("eclair.api.port"))
}

View File

@ -2,8 +2,11 @@ package fr.acinq.eclair.api
import java.net.InetSocketAddress
import akka.actor.{Actor, ActorRef}
import akka.actor.ActorRef
import akka.http.scaladsl.model.{HttpEntity, StatusCodes, ContentTypes, HttpResponse}
import akka.util.Timeout
import akka.http.scaladsl.server.Directives._
import fr.acinq.bitcoin.BinaryData
import fr.acinq.eclair._
import fr.acinq.eclair.channel._
@ -15,8 +18,6 @@ import org.json4s.JsonAST.JString
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.Serialization
import spray.http.{ContentTypes, HttpEntity, HttpResponse, StatusCodes}
import spray.routing.HttpService
import scala.concurrent.{ExecutionContext, Future}
import scala.concurrent.duration._
@ -28,26 +29,12 @@ import fr.acinq.eclair.channel.Register.ListChannels
* Created by PM on 25/01/2016.
*/
// we don't implement our route structure directly in the service actor because
// we want to be able to test it independently, without having to spin up an actor
abstract class ServiceActor extends Actor with Service {
// the HttpService trait defines only one abstract member, which
// connects the services environment to the enclosing actor or test
def actorRefFactory = context
// this actor only runs our route, but you could add
// other things here, like request stream processing,
// timeout handling or alternative handler registration
def receive = runRoute(route)
}
case class JsonRPCBody(jsonrpc: String = "1.0", id: String = "scala-client", method: String, params: Seq[JValue])
case class Error(code: Int, message: String)
case class JsonRPCRes(result: AnyRef, error: Option[Error], id: String)
//TODO : use Json4sSupport ?
trait Service extends HttpService with Logging {
trait Service extends Logging {
implicit def ec: ExecutionContext = ExecutionContext.Implicits.global

View File

@ -44,7 +44,6 @@
<scala.version>2.11.7</scala.version>
<scala.version.short>2.11</scala.version.short>
<akka.version>2.4.4</akka.version>
<spray.version>1.3.3</spray.version>
<bitcoinlib.version>0.9.5</bitcoinlib.version>
<acinqtools.version>1.2</acinqtools.version>
</properties>