2014-12-08 17:29:40 +01:00
|
|
|
package docs.stream.cookbook
|
|
|
|
|
|
|
|
|
|
import akka.stream.scaladsl.{ Sink, Source }
|
2015-04-24 11:45:03 +03:00
|
|
|
import akka.stream.testkit._
|
2014-12-08 17:29:40 +01:00
|
|
|
|
|
|
|
|
import scala.concurrent.duration._
|
|
|
|
|
|
|
|
|
|
class RecipeMissedTicks extends RecipeSpec {
|
|
|
|
|
|
|
|
|
|
"Recipe for collecting missed ticks" must {
|
|
|
|
|
|
|
|
|
|
"work" in {
|
|
|
|
|
type Tick = Unit
|
|
|
|
|
|
2015-04-24 11:45:03 +03:00
|
|
|
val pub = TestPublisher.probe[Tick]()
|
|
|
|
|
val sub = TestSubscriber.manualProbe[Int]()
|
2014-12-08 17:29:40 +01:00
|
|
|
val tickStream = Source(pub)
|
|
|
|
|
val sink = Sink(sub)
|
|
|
|
|
|
|
|
|
|
//#missed-ticks
|
|
|
|
|
// tickStream is a Source[Tick]
|
2015-01-28 14:19:50 +01:00
|
|
|
val missedTicks: Source[Int, Unit] =
|
2014-12-08 17:29:40 +01:00
|
|
|
tickStream.conflate(seed = (_) => 0)(
|
|
|
|
|
(missedTicks, tick) => missedTicks + 1)
|
|
|
|
|
//#missed-ticks
|
|
|
|
|
|
|
|
|
|
missedTicks.to(sink).run()
|
|
|
|
|
|
2015-04-24 11:45:03 +03:00
|
|
|
pub.sendNext(())
|
|
|
|
|
pub.sendNext(())
|
|
|
|
|
pub.sendNext(())
|
|
|
|
|
pub.sendNext(())
|
2014-12-08 17:29:40 +01:00
|
|
|
|
|
|
|
|
val subscription = sub.expectSubscription()
|
|
|
|
|
subscription.request(1)
|
|
|
|
|
sub.expectNext(3)
|
|
|
|
|
|
|
|
|
|
subscription.request(1)
|
|
|
|
|
sub.expectNoMsg(100.millis)
|
|
|
|
|
|
2015-04-24 11:45:03 +03:00
|
|
|
pub.sendNext(())
|
2014-12-08 17:29:40 +01:00
|
|
|
sub.expectNext(0)
|
|
|
|
|
|
2015-04-24 11:45:03 +03:00
|
|
|
pub.sendComplete()
|
2014-12-08 17:29:40 +01:00
|
|
|
subscription.request(1)
|
|
|
|
|
sub.expectComplete()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|