/** * Copyright (C) 2009-2013 Typesafe Inc. */ package docs.transactor; //#class import akka.actor.*; import akka.transactor.*; import scala.concurrent.stm.Ref; import scala.concurrent.stm.japi.STM; public class CoordinatedCounter extends UntypedActor { private Ref.View count = STM.newRef(0); public void onReceive(Object incoming) throws Exception { if (incoming instanceof Coordinated) { Coordinated coordinated = (Coordinated) incoming; Object message = coordinated.getMessage(); if (message instanceof Increment) { Increment increment = (Increment) message; if (increment.hasFriend()) { increment.getFriend().tell( coordinated.coordinate(new Increment()), getSelf()); } coordinated.atomic(new Runnable() { public void run() { STM.increment(count, 1); } }); } } else if ("GetCount".equals(incoming)) { getSender().tell(count.get(), getSelf()); } else { unhandled(incoming); } } } //#class