Guest User

Untitled

a guest
Feb 13th, 2017
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.77 KB | None | 0 0
  1. import Petuh.Kudah
  2. import akka.actor.{Actor, ActorRef, ActorSelection, ActorSystem, Props, Terminated}
  3. import com.typesafe.config.ConfigFactory
  4.  
  5. import scala.io.StdIn
  6.  
  7. object Parasha {
  8.   case class Manya(name: String, manya: ActorRef)
  9.   case object Podmojsa
  10.   case class Kokok(kudah: String)
  11.   case class Kukarek(kokpok: String)
  12. }
  13.  
  14. class Parasha extends Actor {
  15.   import Parasha._
  16.   var manki = Map.empty[String, ActorRef]
  17.  
  18.   def receive: Receive = {
  19.     case Manya(petushok, _) if manki.contains(petushok)
  20.       sender() ! Podmojsa
  21.  
  22.     case Manya(pogonalo, manya)
  23.       manki.values.foreach(_ ! Manya(pogonalo, manya))
  24.       manki.map(Manya.tupled).foreach(sender() ! _)
  25.       manki += pogonalo → manya
  26.       context.watch(manya)
  27.  
  28.     case Terminated(chert)
  29.       manki = manki.filter(_._2 != chert)
  30.  
  31.     case Kokok("/help")
  32.       sender() ! Kukarek("Вилку в глаз, или в жопу раз?")
  33.   }
  34. }
  35.  
  36. object Petuh {
  37.   case class Kudah(kudah: String)
  38.   case class Pokpok(kukarek: String)
  39. }
  40.  
  41. class Petuh(parasha: ActorSelection, pogonalo: String) extends Actor {
  42.   import Parasha._
  43.   import Petuh._
  44.   var manki = Map.empty[ActorRef, String]
  45.  
  46.   def receive: Receive = {
  47.     case Podmojsa ⇒
  48.       context.stop(self)
  49.  
  50.     case Manya(pogonalo, manya)
  51.       manki += manya → pogonalo
  52.  
  53.     case Kudah(kudah)
  54.       if (kudah.startsWith("/")) {
  55.         parasha ! Kokok(kudah)
  56.       } else {
  57.         manki.keys.foreach(_ ! Pokpok(kudah))
  58.       }
  59.  
  60.     case Pokpok(kukarek)
  61.       println(s"${manki.getOrElse(sender(), "???")}: $kukarek")
  62.  
  63.     case Kukarek(kokpok)
  64.       println(s"ПОЛОЖНЯК: $kokpok")
  65.   }
  66.  
  67.   override def preStart(): Unit = {
  68.     parasha ! Manya(pogonalo, self)
  69.   }
  70. }
  71.  
  72. object Zona extends App {
  73.   implicit val actorSystem = ActorSystem("zona", ConfigFactory.parseString("akka {\n  actor {\n\tprovider = remote\nwarn-about-java-serializer-usage=false  }\n  remote {\n\tenabled-transports = [\"akka.remote.netty.tcp\"]\n\tnetty.tcp {\n\t  hostname = \"127.0.0.1\"\n\t  port = 2552\n\t}\n }\n}"))
  74.  
  75.   val parasha = actorSystem.actorOf(Props[Parasha], "parasha")
  76. }
  77.  
  78. object Petushok extends App {
  79.   implicit val actorSystem = ActorSystem("petushok", ConfigFactory.parseString("akka {\n  actor {\n\tprovider = remote\n warn-about-java-serializer-usage=false }\n  remote {\n\tenabled-transports = [\"akka.remote.netty.tcp\"]\n\tnetty.tcp {\n\t  hostname = \"127.0.0.1\"\n\t  port = " + (2553 + args(0).toInt) + "\n\t}\n }\n}"))
  80.  
  81.   val parasha = actorSystem.actorSelection("akka.tcp://[email protected]:2552/user/parasha")
  82.   val petushok = actorSystem.actorOf(Props(classOf[Petuh], parasha, args(1)))
  83.   Iterator
  84.     .continually(StdIn.readLine())
  85.     .takeWhile(null ne)
  86.     .foreach(petushok ! Kudah(_))
  87. }
Add Comment
Please, Sign In to add comment