2011-10-25 11 views
5

Soy nuevo en scala, y estoy buscando el uso de Publisher-Subscribe. Puede haber un problema con mis habilidades de Google, pero parece que no puedo encontrar un ejemplo de este uso en el que pueda especificar qué eventos debe observar el suscriptor.Publisher suscribirse en Scala

¿Alguien tiene algunos ejemplos?

Gracias!

Respuesta

4

Si necesitas algo realmente simple, entonces te sugiero que lo hagas a ti mismo, no debería ser tan difícil. Pero si quieres algo más grande, puedes mirar Eventbus. Es Java lib, pero también lo estoy usando con Scala.

un ejemplo de implementación de Scala se describe en http://jim-mcbeath.blogspot.com/2009/10/simple-publishsubscribe-example-in.html

+0

bien lo he visto el tutorial de Jim McBeath, pero en realidad estoy buscando una implementación del rasgo Editorial Escala (http://www.scala-lang.org/api /2.7.1/scala/collection/mutable/Publisher.html) – user485659

+0

No encontré uno, también. ¿Qué te impide exactamente la implementación? Un editor solo publicará un tipo de evento. Pero si este tema le interesa, puede consultar [Deprecating the Observer Pattern] (http://lamp.epfl.ch/~imaier/pub/DeprecatingObserversTR2010.pdf) de Ingo Maier, Tiark Rompf, Martin Odersky. – hellectronic

+0

Actualmente estoy buscando una manera de monitorear una clase: tan pronto como cualquiera de sus métodos finalice, quiero que alguna clase de monitor capture el evento y haga algunas cosas. Así que estoy buscando una forma en que cada método de la clase editorial se publique automáticamente cuando esté terminado. – user485659

4

Un ejemplo simple referencia se puede encontrar en 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() 
} 
2

Puede encontrar una sencilla aplicación EventBus aquí. También realiza el manejo de eventos asíncronos y la publicación programada de eventos.

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)) 
Cuestiones relacionadas