From 5a6fc8506af742694c856215dc0e182ba8790c08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Mon, 6 Feb 2012 21:12:20 +0100 Subject: Show state in StateServlet. Support interacting with a Client. --- same/src/main/java/com/orbekk/same/Client.java | 17 +++++++++++++++++ same/src/main/java/com/orbekk/same/SameController.java | 2 +- same/src/main/java/com/orbekk/same/State.java | 4 ++++ .../main/java/com/orbekk/same/http/StateServlet.java | 10 ++++++++-- 4 files changed, 30 insertions(+), 3 deletions(-) (limited to 'same') diff --git a/same/src/main/java/com/orbekk/same/Client.java b/same/src/main/java/com/orbekk/same/Client.java index ce3947c..2a5f11e 100644 --- a/same/src/main/java/com/orbekk/same/Client.java +++ b/same/src/main/java/com/orbekk/same/Client.java @@ -19,6 +19,19 @@ public class Client implements DiscoveryListener { private StateChangedListener stateListener; private NetworkNotificationListener networkListener; + public class ClientInterface { + private ClientInterface() { + } + + /** Get a copy of all the client state. + */ + public State getState() { + return new State(state); + } + } + + private ClientInterface clientInterface = new ClientInterface(); + private ClientService serviceImpl = new ClientService() { @Override public void setState(String component, String data, long revision) throws Exception { @@ -87,6 +100,10 @@ public class Client implements DiscoveryListener { } } + ClientInterface getInterface() { + return clientInterface; + } + String lib_get(String name) { return state.getDataOf(name); } diff --git a/same/src/main/java/com/orbekk/same/SameController.java b/same/src/main/java/com/orbekk/same/SameController.java index abf97c1..6b18115 100644 --- a/same/src/main/java/com/orbekk/same/SameController.java +++ b/same/src/main/java/com/orbekk/same/SameController.java @@ -45,7 +45,7 @@ public class SameController { PaxosServiceImpl paxos = new PaxosServiceImpl(""); ServerContainer server = new ServerBuilder(port) - .withServlet(new StateServlet(), "/_/state") + .withServlet(new StateServlet(client.getInterface()), "/_/state") .withService(client.getService(), ClientService.class) .withService(master, MasterService.class) .withService(paxos, PaxosService.class) diff --git a/same/src/main/java/com/orbekk/same/State.java b/same/src/main/java/com/orbekk/same/State.java index f8ba6a4..ea13582 100644 --- a/same/src/main/java/com/orbekk/same/State.java +++ b/same/src/main/java/com/orbekk/same/State.java @@ -30,6 +30,10 @@ public class State { updateFromObject(".participants", new ArrayList(), 1); } + public State(State other) { + state.putAll(other.state); + } + public synchronized void clear() { logger.info("Clearing state."); updatedComponents.clear(); diff --git a/same/src/main/java/com/orbekk/same/http/StateServlet.java b/same/src/main/java/com/orbekk/same/http/StateServlet.java index 62b304c..0ccf062 100644 --- a/same/src/main/java/com/orbekk/same/http/StateServlet.java +++ b/same/src/main/java/com/orbekk/same/http/StateServlet.java @@ -9,15 +9,21 @@ import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.orbekk.same.Client; + public class StateServlet extends HttpServlet { private Logger logger = LoggerFactory.getLogger(getClass()); + private Client.ClientInterface client; + + public StateServlet(Client.ClientInterface client) { + this.client = client; + } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - logger.error("GOT HERE"); response.setContentType("text/plain; charset=utf8"); - response.getWriter().println("HI"); + response.getWriter().println(client.getState()); response.setStatus(HttpServletResponse.SC_OK); } } -- cgit v1.2.3