Издатель подписывается в Scala - PullRequest
5 голосов
/ 25 октября 2011

Я новичок в scala и изучаю использование Publisher-Subscribe. Могут быть проблемы с моими навыками Google, но я не могу найти пример такого использования, где я могу указать, какие события должен наблюдать подписчик.

Кто-нибудь есть примеры?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 01 октября 2013

Простой справочный пример можно найти на http://comments.gmane.org/gmane.comp.lang.scala.user/63002:

case class MyEvent(number: Int)

class PrintIt extends Subscriber[MyEvent, Publisher[MyEvent]] {
  override def notify(pub: Publisher[MyEvent], event: MyEvent): Unit = {
    println("got an event: " + event)
  }
}

class RunIt extends Publisher[MyEvent] {
  def pub() = publish(MyEvent(12))
}

object Main extends App {
  val runIt = new RunIt()
  runIt.subscribe(new PrintIt)
  runIt.pub()
}
4 голосов
/ 25 октября 2011

Если вам нужно что-то действительно простое, тогда я предлагаю сделать это самостоятельно, это не должно быть так сложно.Но если вы хотите чего-то большего, вы можете взглянуть на Eventbus .Это Java lib, но я использую его и со Scala.

Пример реализации в Scala описан в http://jim -mcbeath.blogspot.com / 2009/10 / simple-publishsubscribe-example-in.html

2 голосов
/ 10 июля 2016

Вы можете найти простую реализацию EventBus здесь. Он также выполняет асинхронную обработку событий и публикацию запланированных событий.

https://github.com/hipjim/scala-event-bus

case class Msg(content: String)
val eb = EventBus()
eb.subscribe[Msg] { t =>
  println(t.content)
}

for (i <- 1 to 100)
 eb.post(Msg(i.toString))
...