2013-01-03 14 views
5

はプレイ2.0.4上の私のプログラムでは、私は、コードのこの作品でした:PlayFramework 2.0.xの> 2.1-RCの移行

val channel = Enumerator.imperative[JsValue](onStart = self ! NotifyJoin(username)) 

を、今ではimperativeが廃止されていることを言うと、APIはIと言います代わりにunicastまたはbroadcastを使用してください。私のコードでchannelがユニキャストだったので、私はunicastを使う傾向があります。だから私は

val channel = Concurrent.unicast[JsValue](onStart = self ! NotifyJoin(username)) 

ようにするしかし、それは動作しません...そのunicastが何かを望んでいるように見えます。私はそれを把握することはできません - APIには情報がありません...誰がここで何をすべきか知っていますか?

UPDATE:

はプレイFrameworkのユーザーグループで議論を始めました。パラダイムを知っている開発者の間では、かなり一般的な問題になります。ドキュメントが改善されることを願っています。

+0

私は1.x.xのバージョンと比較すると、プレイフレームワーク2。*。*はドキュメントが良くないと思います。 –

答えて

3

Concurrent.unicastためのAPIは次のとおりです。Concurrent.broadcastため

unicast[E](onStart: (Channel[E]) ⇒ Unit, onComplete: ⇒ Unit, onError: (String, Input[E]) ⇒ Unit): Enumerator[E] 

APIは以下のとおりです。

http://localhost:9000/@documentation/api/scala/index.html#play.api.libs.iteratee.Concurrent$ 
+2

ええ、私はこれをウェブサイトで見ました。あまりにも悪いことに、私は 'Channel [E]'や 'Enumerator [E]'がどこにあるかについては何も言及しておらず、実際の動作を実際には説明していません。実際には、私がAPIページを開いていたときに、これらの2つの署名がありました。しかし、これは、Eclipseがデフォルトで提供するものよりもはるかに多くの助けではありません、そのオートコンプリート提案。私はいくつかの説明が価値があるという点を立証しようとしているだけです。 – noncom

+0

'broadcast'は' Enumerator [E] 'と' Channel [E] 'を持つタプルを返します。それはあなたが必要とするものではありませんか? –

+1

ハハ、あなたが欲しいものを私に呼んでください。しかし、私はこの種のAPIに全く新しいです。だから、私はちょうど良いテキストの説明がほしい、署名ではありません。とにかく、これについてPlay Frameworkのユーザーグループには既にスレッドがあります。このエリアには多くのpplが新しくなっていることが分かります。 – noncom

0

の例:

broadcast[E]: (Enumerator[E], Channel[E]) 

あなたがであなたのアプリでAPIを取得することができますユニキャストを使用:

// here is an enumerator that returns a chunk to the channel 
val outEnumerator = Concurrent.unicast[JsValue] { channel => 
    val data = Json.obj("data" -> 12345) 
    channel.push(data) 
} 

古いEnumerator.imperativeを使用する代わりに、generateMを使用することです。ここでは

val out = Enumerator.generateM[JsValue] { 
    Promise.timeout({ 
     Some(Json.obj("data" -> 12345)) 
    }, 100, TimeUnit.MILLISECONDS) 
} 

は、我々はタイムアウトを使用して、繰り返し値を生成します。この列挙子は永遠に繰り返されますが、generateMでは、完了時にNoneを返すことができます。

関連する問題