From acb7a2cd0794d8ed6f623ad6b279f193aa76188e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Mon, 7 May 2012 14:00:14 +0200 Subject: Client keeps revision field. --- same/src/main/java/com/orbekk/same/Client.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'same/src/main/java/com/orbekk/same/Client.java') diff --git a/same/src/main/java/com/orbekk/same/Client.java b/same/src/main/java/com/orbekk/same/Client.java index 0ee4c10..2479591 100644 --- a/same/src/main/java/com/orbekk/same/Client.java +++ b/same/src/main/java/com/orbekk/same/Client.java @@ -21,6 +21,7 @@ import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicLong; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,6 +50,7 @@ public class Client { private final RpcFactory rpcf; private final ExecutorService executor; private final ClientInterface clientInterface = new ClientInterfaceImpl(); + private final AtomicLong revision = new AtomicLong(0); private List stateListeners = new ArrayList(); @@ -136,6 +138,7 @@ public class Client { for (StateChangedListener listener : stateListeners) { listener.stateChanged(state.getComponent(request.getId())); } + updateRevision(request.getRevision()); } else { logger.warn("Ignoring update: {) => {}", state.getComponent(request.getId()), @@ -257,6 +260,7 @@ public class Client { return Services.ClientState.newBuilder() .setUrl(myUrl) .setLocation(myLocation) + .setRevision(revision.get()) .build(); } @@ -337,4 +341,13 @@ public class Client { } } } + + public void updateRevision(long newRevision) { + boolean updated = false; + while (!updated) { + long expected = revision.get(); + long update = Math.max(expected, newRevision); + updated = revision.compareAndSet(expected, update); + } + } } -- cgit v1.2.3