2011-10-25 18 views
5

私はscalaを使い慣れていません。Publisher-Subscribeの使い方を調べています。私のGoogleのスキルに問題があるかもしれませんが、私はどのようなイベントを加入者が観察すべきかを指定できるこの使用例を見つけることができません。Scalaで購読する購読者

誰かに例がありますか?

ありがとうございます!

答えて

4

本当にシンプルなものが必要な場合は、自分でやってみることをお勧めします。しかし、あなたが何か大きいものを望むなら、Eventbusを見ることができます。それはJavaのlibですが、私はScalaでもそれを使用しています。 Scalaでは

実装例がhttp://jim-mcbeath.blogspot.com/2009/10/simple-publishsubscribe-example-in.html

+0

まあ、私はジムMcBeathのチュートリアルを見てきましたが、実際に私はスケールPublisherの形質の実装を探しています(http://www.scala-lang.org/api /2.7.1/scala/collection/mutable/Publisher.html) – user485659

+0

私は1つも見つかりませんでした。あなたは実装から何を止めていますか?パブリッシャーは1種類のイベントのみを公開します。しかし、この主題に興味があれば、Ingo Maier、Tiark Rompf、Martin Oderskyから[Observer Pattern Observer](http://lamp.epfl.ch/~imaier/pub/DeprecatingObserversTR2010.pdf)を見ることができます。 – hellectronic

+0

実際に私はクラスを監視する方法を探しています。そのメソッドのいずれかが終了するとすぐに、いくつかのモニタークラスでイベントをキャプチャして何かすることができます。だから私は、パブリッシャークラスの各メソッドが完了すると自動的にパブリッシュする方法を探しています。 – user485659

4

に記述されている簡単な参考例は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

あなたがここに簡単な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))