Advertisement
Guest User

Untitled

a guest
Dec 5th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.13 KB | None | 0 0
  1. package engine
  2.  
  3. import akka.NotUsed
  4. import akka.actor.{Actor, ActorLogging, ActorRef, ActorSystem, Props, Terminated}
  5. import akka.http.scaladsl.Http
  6. import akka.http.scaladsl.model.{HttpRequest, HttpResponse}
  7. import akka.stream.{ActorMaterializer, ActorMaterializerSettings, OverflowStrategy, ThrottleMode}
  8. import akka.stream.scaladsl.{Sink, Source}
  9. import com.typesafe.config.ConfigFactory
  10. import engine.Sender.Send
  11.  
  12. import scala.concurrent.duration._
  13. import scala.io.StdIn
  14.  
  15. // TODO persistent queue
  16.  
  17. object Engine {
  18.  
  19.   def main(args: Array[String]): Unit = {
  20.     val config = ConfigFactory.load()
  21.     val value = config.getString("my.secret.value")
  22.     println(s"My secret value is $value")
  23.  
  24.     val system = ActorSystem("EngineSystem")
  25.     try {
  26.       val senderActor: ActorRef = system.actorOf(Sender.props(), "SenderActor")
  27.  
  28.       implicit val materializer = ActorMaterializer.create(system)
  29.  
  30.       val actor = Source.actorRef(bufferSize = 1000, OverflowStrategy.dropNew)
  31.         .throttle(100, 1.second)
  32.         .to(Sink.actorRef(senderActor, NotUsed))
  33.         .run()
  34.  
  35.       for (i <- 1 to 2000)
  36.         actor ! Send
  37.  
  38.       StdIn.readLine()
  39.     } finally {
  40.       system.terminate()
  41.     }
  42.   }
  43.  
  44. }
  45.  
  46. object Sender {
  47.   def props(): Props = Props(new Sender)
  48.  
  49.   final case class Send()
  50. }
  51.  
  52. class Sender() extends Actor with ActorLogging {
  53.  
  54.   import akka.pattern.pipe
  55.   import context.dispatcher
  56.  
  57.   final implicit val materializer: ActorMaterializer = ActorMaterializer(ActorMaterializerSettings(context.system))
  58.   val http = Http(context.system)
  59.  
  60.   override def preStart(): Unit = log.info("Sender started")
  61.   override def postStop(): Unit = log.info("Sender stopped")
  62.  
  63.   override def receive: Receive = {
  64.     case resp @ Send ⇒
  65.       http.singleRequest(HttpRequest(uri = "http://10.210.7.249:13013/cgi-bin/sendsms?username=dynamo&password=dynam0123&to=1234567890&from=1234&smsc=unknown&text=asdfghj")).pipeTo(self)
  66.     case resp @ HttpResponse(code, _, _, _) =>
  67.       log.info("Response code: " + code)
  68.       resp.discardEntityBytes()
  69.     case resp @ _ =>
  70.       throw new Exception(resp.toString);
  71.   }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement