Skip to content

Instantly share code, notes, and snippets.

@ryantanner
Last active November 11, 2015 00:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ryantanner/3196c72417ed096a8671 to your computer and use it in GitHub Desktop.
Save ryantanner/3196c72417ed096a8671 to your computer and use it in GitHub Desktop.
case object Hello
case object Howdy
case object GetCount
case class HelloCount(count: Int)
class HelloActor extends Actor {
var count = 0
def receive = {
case Hello =>
count += 1
sender() ! Howdy
case GetCount =>
sender() ! HelloCount(count)
}
val helloActor = system.actorOf(Props[HelloActor])
helloActor ! Hello
for {
HelloCount(count) <- (helloActor ? GetCount).mapTo[HelloCount]
} yield {
println(count)
}
class ImpressionCounter extends Actor {
import akka.cluster.ddata.Replicator._
val replicator = DistributedData(context.system).replicator
implicit val cluster = Cluster(context.system)
val ImpressionsKey = PNCounterMapKey("impressions")
def receive = {
case AdViewed(adId) ⇒
val update = Update(ImpressionsKey, PNCounterMap(), WriteLocal) {
_.increment(adId, 1)
}
replicator ! update
case GetImpressions(adId) ⇒
replicator ! Get(ImpressionsKey, ReadAll(3.seconds), Some(GetImpressionsReq(adId, sender()))
case g @ GetSuccess(ImpressionsKey, Some(GetImpressionsReq(adId, replyTo))) ⇒
val data = g.get(ImpressionsKey)
replyTo ! AdImpressions(data.entries(adId))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment