2013-01-03 15 views
5

Oynat 2.0.4 benim programda ben bu kod parçası vardı:Play Framework 2.0.x> 2.1-RC göç

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

ve şimdi imperative kullanımdan kaldırıldı söylüyor ve API diyor ben Bunun yerine unicast veya broadcast kullanmalısınız. unicast kullanıyorum çünkü kodumda channel tek noktaya yayın vardı. Bu yüzden

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

gibi yapmak Ama bu unicast başka bir şey istiyor gibi .. görünüyor çalışmıyor. Anlayamıyorum - API'da daha fazla bilgi yok ... burada ne yapılacağını bilen var mı?

GÜNCELLEME:

Çal Çerçeve kullanıcı grubundaki bir tartışma başladı. Paradigmayı bilen geliştiriciler arasında oldukça yaygın bir sorun olduğu ortaya çıkıyor. Belgelerin geliştirileceğini umuyoruz.

+0

Sanırım oyun çerçevesi 2. *. * 1.x.x sürümleriyle karşılaştırdığımızda belgelere iyi gelmiyor. –

cevap

3

Concurrent.unicast API geçerli:

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

Concurrent.broadcast API olmaktadır:

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

Evet, bunu web sitesinde gördüm. Çok kötü, Kanal [E] 'ya da“ Enumerator [E] 'yi nereden aldığımda hiçbir şey söylemiyor ve gerçekte nasıl çalıştığını açıklamıyor. Aslında, API sayfasında bulunduğum sırada, sadece bu iki imza vardı. Ancak bu, Eclipse'in otomatik tamamlama önerilerinde varsayılan olarak sağladığıden çok daha fazla yardım değildir. Sadece bazı açıklamaların değerinde olduğunu göstermeye çalışıyorum. – noncom

+0

'broadcast',' Enumerator [E] 've' Channel [E] 'ile bir tuple döndürür. İhtiyacın olan bu değil mi? –

+1

Haha, ne istediğini söyle, ama bu tür bir API için tamamen yeniyim, bu yüzden sadece iyi bir metinsel açıklama istiyorum, imzaları değil. Her neyse, zaten PlaySoft kullanıcı grubunda bu konuyla ilgili bir mesaj var. – noncom

0

Örnek:

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

En uygulamanızda API alabilirsiniz Tek Noktaya Yayın kullanarak:

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

eski Enumerator.imperative kullanarak alternatif generateM kullanmaktır: Burada

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

, bir zaman aşımı kullanılarak yinelenen bir değer üretir. Bu numaralayıcı sonsuza kadar tekrarlanır, ancak generateM, bittiğinde belirtmek için Hiçbiri'ye dönmenize izin verir.

İlgili konular