2014-12-08 17:29:40 +01:00
|
|
|
package docs.stream.cookbook
|
|
|
|
|
|
2015-10-21 22:45:39 +02:00
|
|
|
import akka.stream.{ ClosedShape, OverflowStrategy }
|
2014-12-08 17:29:40 +01:00
|
|
|
import akka.stream.scaladsl._
|
2015-04-24 11:45:03 +03:00
|
|
|
import akka.stream.testkit._
|
2014-12-08 17:29:40 +01:00
|
|
|
|
|
|
|
|
import scala.collection.immutable
|
|
|
|
|
import scala.concurrent.Await
|
|
|
|
|
|
|
|
|
|
class RecipeDroppyBroadcast extends RecipeSpec {
|
|
|
|
|
|
|
|
|
|
"Recipe for a droppy broadcast" must {
|
|
|
|
|
"work" in {
|
2015-09-02 14:09:21 +02:00
|
|
|
val pub = TestPublisher.probe[Int]()
|
2015-12-17 11:48:30 +02:00
|
|
|
val myElements = Source.fromPublisher(pub)
|
2014-12-08 17:29:40 +01:00
|
|
|
|
2015-04-24 11:45:03 +03:00
|
|
|
val sub1 = TestSubscriber.manualProbe[Int]()
|
|
|
|
|
val sub2 = TestSubscriber.manualProbe[Int]()
|
2015-09-02 14:09:21 +02:00
|
|
|
val sub3 = TestSubscriber.probe[Int]()
|
2015-01-28 14:19:50 +01:00
|
|
|
val futureSink = Sink.head[Seq[Int]]
|
2015-12-17 11:48:30 +02:00
|
|
|
val mySink1 = Sink.fromSubscriber(sub1)
|
|
|
|
|
val mySink2 = Sink.fromSubscriber(sub2)
|
|
|
|
|
val mySink3 = Sink.fromSubscriber(sub3)
|
2014-12-08 17:29:40 +01:00
|
|
|
|
|
|
|
|
//#droppy-bcast
|
2016-06-02 14:06:57 +02:00
|
|
|
val graph = RunnableGraph.fromGraph(GraphDSL.create(mySink1, mySink2, mySink3)((_, _, _)) { implicit b => (sink1, sink2, sink3) =>
|
|
|
|
|
import GraphDSL.Implicits._
|
2014-12-08 17:29:40 +01:00
|
|
|
|
2016-06-02 14:06:57 +02:00
|
|
|
val bcast = b.add(Broadcast[Int](3))
|
|
|
|
|
myElements ~> bcast
|
2014-12-08 17:29:40 +01:00
|
|
|
|
2016-06-02 14:06:57 +02:00
|
|
|
bcast.buffer(10, OverflowStrategy.dropHead) ~> sink1
|
|
|
|
|
bcast.buffer(10, OverflowStrategy.dropHead) ~> sink2
|
|
|
|
|
bcast.buffer(10, OverflowStrategy.dropHead) ~> sink3
|
|
|
|
|
ClosedShape
|
2015-10-21 22:45:39 +02:00
|
|
|
})
|
2014-12-08 17:29:40 +01:00
|
|
|
//#droppy-bcast
|
|
|
|
|
|
2015-09-02 14:09:21 +02:00
|
|
|
graph.run()
|
|
|
|
|
|
|
|
|
|
sub3.request(100)
|
|
|
|
|
for (i <- 1 to 100) {
|
|
|
|
|
pub.sendNext(i)
|
|
|
|
|
sub3.expectNext(i)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub.sendComplete()
|
2014-12-08 17:29:40 +01:00
|
|
|
|
|
|
|
|
sub1.expectSubscription().request(10)
|
|
|
|
|
sub2.expectSubscription().request(10)
|
|
|
|
|
|
|
|
|
|
for (i <- 91 to 100) {
|
|
|
|
|
sub1.expectNext(i)
|
|
|
|
|
sub2.expectNext(i)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub1.expectComplete()
|
|
|
|
|
sub2.expectComplete()
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|