2013-01-03 2 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 :

는 플레이 프레임 워크 사용자 그룹에 토론을 시작했다. 패러다임에 익숙한 개발자들 사이에서 꽤 흔한 문제로 드러납니다. 문서가 개선 될 것으로 기대됩니다.

+0

나는 우리가 1.x.x 버전과 비교할 때 문서를 잘 이해하지 못한다고 생각한다. –

답변

3

Concurrent.unicast의 API는 다음과 같습니다

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

Concurrent.broadcast의 API는 다음의

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

네, 웹 사이트에서 이걸 보았습니다. 너무 나쁜데,'Channel [E]'또는'Enumerator [E]'를 어디서 구할 지 아무 것도 말하지 않고 실제로 어떻게 작동 하는지를 설명하지 않습니다. 사실, 제가 API 페이지에 있었을 때이 두 서명 만있었습니다. 그러나 이것은 Eclipse가 자동 완성 제안에서 제공하는 것보다 훨씬 도움이되지 않습니다. 나는 단지 설명이 가치가 있다는 점을 지적하려고 노력하고있다. – noncom

+0

'broadcast'는'Enumerator [E]'와'Channel [E]'를 가진 튜플을 반환합니다. 그게 네가 필요로하는 것이 아닌가? –

+1

하하, 내게 전화해라. 그러나 나는 이런 종류의 API에 완전히 익숙하지 않다. 그래서 나는 서명이 아닌 훌륭한 텍스트 설명 만 원한다. 어쨌든, 이미 Play Framework 사용자 그룹에 스레드에 대한 설명이 있습니다 ... 많은 사람들이이 분야에 새로운 사람들로 밝혀졌습니다. – 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을 반환 할 수 있지만이 열거자는 계속 반복됩니다.

관련 문제