+doc Basic Fiddle interactive examples
This commit is contained in:
parent
c840bd6f37
commit
8a6cebedef
5 changed files with 110 additions and 7 deletions
|
|
@ -5,21 +5,29 @@ package docs.actor
|
|||
|
||||
import jdocs.actor.ImmutableMessage
|
||||
|
||||
//#fiddle_code
|
||||
import language.postfixOps
|
||||
//#fiddle_code
|
||||
|
||||
//#fiddle_code
|
||||
//#imports1
|
||||
import akka.actor.Actor
|
||||
import akka.actor.Props
|
||||
//#fiddle_code
|
||||
import akka.event.Logging
|
||||
|
||||
//#imports1
|
||||
|
||||
import scala.concurrent.Future
|
||||
//#fiddle_code
|
||||
import akka.actor.{ ActorRef, ActorSystem, PoisonPill, Terminated, ActorLogging }
|
||||
//#fiddle_code
|
||||
import org.scalatest.{ BeforeAndAfterAll, WordSpec }
|
||||
import akka.testkit._
|
||||
import akka.util._
|
||||
//#fiddle_code
|
||||
import scala.concurrent.duration._
|
||||
//#fiddle_code
|
||||
import scala.concurrent.Await
|
||||
import akka.Done
|
||||
import akka.actor.CoordinatedShutdown
|
||||
|
|
@ -275,6 +283,38 @@ final case class Give(thing: Any)
|
|||
|
||||
//#receive-orElse
|
||||
|
||||
//#fiddle_code
|
||||
|
||||
case object Ping
|
||||
case object Pong
|
||||
|
||||
class Pinger extends Actor {
|
||||
var countDown = 100
|
||||
|
||||
def receive = {
|
||||
case Pong =>
|
||||
println(s"${self.path} received pong, count down $countDown")
|
||||
|
||||
if (countDown > 0) {
|
||||
countDown -= 1
|
||||
sender() ! Ping
|
||||
} else {
|
||||
sender() ! PoisonPill
|
||||
self ! PoisonPill
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Ponger(pinger: ActorRef) extends Actor {
|
||||
def receive = {
|
||||
case Ping =>
|
||||
println(s"${self.path} received ping")
|
||||
pinger ! Pong
|
||||
}
|
||||
}
|
||||
|
||||
//#fiddle_code
|
||||
|
||||
class ActorDocSpec extends AkkaSpec("""
|
||||
akka.loglevel = INFO
|
||||
akka.loggers = []
|
||||
|
|
@ -322,6 +362,31 @@ class ActorDocSpec extends AkkaSpec("""
|
|||
system.stop(myActor)
|
||||
}
|
||||
|
||||
"run basic Ping Pong" in {
|
||||
//#fiddle_code
|
||||
val system = ActorSystem("pingpong")
|
||||
|
||||
val pinger = system.actorOf(Props[Pinger], "pinger")
|
||||
|
||||
val ponger = system.actorOf(Props(classOf[Ponger], pinger), "ponger")
|
||||
|
||||
//#fiddle_code
|
||||
val testProbe = new TestProbe(system)
|
||||
testProbe watch pinger
|
||||
testProbe watch ponger
|
||||
//#fiddle_code
|
||||
import system.dispatcher
|
||||
system.scheduler.scheduleOnce(500 millis) {
|
||||
ponger ! Ping
|
||||
}
|
||||
|
||||
// $FiddleDependency org.akka-js %%% akkajsactor % 1.2.5.1
|
||||
//#fiddle_code
|
||||
testProbe.expectTerminated(pinger)
|
||||
testProbe.expectTerminated(ponger)
|
||||
system.terminate()
|
||||
}
|
||||
|
||||
"creating a Props config" in {
|
||||
//#creating-props
|
||||
import akka.actor.Props
|
||||
|
|
|
|||
|
|
@ -5,11 +5,12 @@ package docs.stream
|
|||
|
||||
//#imports
|
||||
|
||||
//#fiddle_code
|
||||
import akka.{ Done, NotUsed }
|
||||
import akka.actor.ActorSystem
|
||||
import akka.stream.{ ClosedShape, ActorMaterializer, OverflowStrategy }
|
||||
import akka.stream.scaladsl._
|
||||
|
||||
//#fiddle_code
|
||||
import scala.concurrent.Await
|
||||
import scala.concurrent.Future
|
||||
|
||||
|
|
@ -18,6 +19,8 @@ import scala.concurrent.Future
|
|||
import akka.testkit.AkkaSpec
|
||||
|
||||
object TwitterStreamQuickstartDocSpec {
|
||||
//#fiddle_code
|
||||
|
||||
//#model
|
||||
final case class Author(handle: String)
|
||||
|
||||
|
|
@ -31,12 +34,15 @@ object TwitterStreamQuickstartDocSpec {
|
|||
val akkaTag = Hashtag("#akka")
|
||||
//#model
|
||||
|
||||
//#fiddle_code
|
||||
|
||||
abstract class TweetSourceDecl {
|
||||
//#tweet-source
|
||||
val tweets: Source[Tweet, NotUsed]
|
||||
//#tweet-source
|
||||
}
|
||||
|
||||
//#fiddle_code
|
||||
val tweets: Source[Tweet, NotUsed] = Source(
|
||||
Tweet(Author("rolandkuhn"), System.currentTimeMillis, "#akka rocks!") ::
|
||||
Tweet(Author("patriknw"), System.currentTimeMillis, "#akka !") ::
|
||||
|
|
@ -49,6 +55,8 @@ object TwitterStreamQuickstartDocSpec {
|
|||
Tweet(Author("appleman"), System.currentTimeMillis, "#apples rock!") ::
|
||||
Tweet(Author("drama"), System.currentTimeMillis, "we compared #apples to #oranges!") ::
|
||||
Nil)
|
||||
|
||||
//#fiddle_code
|
||||
}
|
||||
|
||||
class TwitterStreamQuickstartDocSpec extends AkkaSpec {
|
||||
|
|
@ -60,12 +68,15 @@ class TwitterStreamQuickstartDocSpec extends AkkaSpec {
|
|||
def println(s: Any): Unit = ()
|
||||
|
||||
trait Example1 {
|
||||
//#fiddle_code
|
||||
//#first-sample
|
||||
//#materializer-setup
|
||||
implicit val system = ActorSystem("reactive-tweets")
|
||||
implicit val materializer = ActorMaterializer()
|
||||
//#materializer-setup
|
||||
//#first-sample
|
||||
|
||||
//#fiddle_code
|
||||
}
|
||||
|
||||
implicit val materializer = ActorMaterializer()
|
||||
|
|
@ -133,6 +144,20 @@ class TwitterStreamQuickstartDocSpec extends AkkaSpec {
|
|||
// format: ON
|
||||
}
|
||||
|
||||
"simple fiddle showcase" in {
|
||||
|
||||
//#fiddle_code
|
||||
tweets
|
||||
.filterNot(_.hashtags.contains(akkaTag))
|
||||
.mapConcat(_.hashtags)
|
||||
.map(_.name.toUpperCase)
|
||||
.runWith(Sink.foreach(println))
|
||||
|
||||
// $FiddleDependency org.akka-js %%% akkajsactorstream % 1.2.5.1
|
||||
//#fiddle_code
|
||||
.value
|
||||
}
|
||||
|
||||
"slowProcessing" in {
|
||||
def slowComputation(t: Tweet): Long = {
|
||||
Thread.sleep(500) // act as if performing some heavy computation
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue