2011-10-25 10 views
5

Sono nuovo su scala e sto esaminando l'utilizzo di Publisher-Subscribe. Potrebbe esserci un problema con le mie competenze di Google, ma non riesco a trovare un esempio di questo utilizzo in cui posso specificare quali eventi devono essere osservati dall'abbonato.Editore sottoscritto in Scala

Qualcuno ha qualche esempio?

Grazie!

risposta

4

Se hai bisogno di qualcosa di veramente semplice, allora ti suggerisco di farlo da solo, non dovrebbe essere così difficile. Ma se vuoi qualcosa di più grande, puoi guardare Eventbus. È Java lib, ma lo sto usando anche con Scala.

un esempio di implementazione in Scala è descritto in http://jim-mcbeath.blogspot.com/2009/10/simple-publishsubscribe-example-in.html

+0

Beh ho visto il tutorial di Jim McBeath, ma in realtà sto cercando un'implementazione della Scala Editore trait (http://www.scala-lang.org/api /2.7.1/scala/collection/mutable/Publisher.html) – user485659

+0

Non ne ho trovato uno anche io. Cosa ti impedisce esattamente dall'implementazione? Un editore pubblicherà solo un tipo di evento. Ma se questo argomento ti interessa, puoi esaminare [Ritrezzando il modello di osservatore] (http://lamp.epfl.ch/~imaier/pub/DeprecatingObserversTR2010.pdf) da Ingo Maier, Tiark Rompf, Martin Odersky. – hellectronic

+0

In realtà sto cercando un modo per monitorare una classe: non appena uno dei suoi metodi è finito, voglio che alcuni monitor class catturino l'evento e facciano qualcosa. Quindi sto cercando un modo in cui ogni metodo della classe editore viene pubblicato automaticamente al termine. – user485659

4

Un esempio di riferimento semplice può essere trovato 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

Si può trovare una semplice implementazione EventBus qui. Gestisce anche eventi asincroni e pubblicazione eventi programmata.

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