39 lines
1.2 KiB
Java
39 lines
1.2 KiB
Java
/**
|
|
* Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
|
|
*/
|
|
|
|
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<Integer> 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
|