summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-02-26 13:25:43 +0100
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-02-26 13:25:43 +0100
commit930596730c3df733dc5c5601579fd044f55682c8 (patch)
treea6108932b2299a7713ed31d4815fd631278fe42b
parentb5c462b2ae88623a3fc759ab073f1b27346b851f (diff)
Support setting state on Android.
-rw-r--r--same-android/src/main/java/com/orbekk/same/SameService.java11
-rw-r--r--same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java18
-rw-r--r--same/src/main/java/com/orbekk/same/Client.java7
-rw-r--r--same/src/main/java/com/orbekk/same/ClientInterface.java1
4 files changed, 34 insertions, 3 deletions
diff --git a/same-android/src/main/java/com/orbekk/same/SameService.java b/same-android/src/main/java/com/orbekk/same/SameService.java
index 386b9b8..9662d6f 100644
--- a/same-android/src/main/java/com/orbekk/same/SameService.java
+++ b/same-android/src/main/java/com/orbekk/same/SameService.java
@@ -29,6 +29,7 @@ public class SameService extends Service {
public final static int UPDATED_STATE_MESSAGE = 5;
public final static int ADD_STATE_RECEIVER = 6;
public final static int REMOVE_STATE_RECEIVER = 7;
+ public final static int SET_STATE = 8;
public final static String AVAILABLE_NETWORKS_UPDATE =
"com.orbekk.same.SameService.action.AVAILABLE_NETWORKS_UPDATE";
@@ -110,6 +111,16 @@ public class SameService extends Service {
Messenger droppedMessenger = (Messenger)message.obj;
stateReceivers.remove(droppedMessenger);
break;
+ case SET_STATE:
+ // TODO: Respond to the callee somehow.
+ State.Component updatedComponent =
+ (State.Component)message.obj;
+ try {
+ sameController.getClient().getInterface().set(
+ updatedComponent);
+ } catch (UpdateConflict e) {
+ logger.info("Update failed: {}", updatedComponent);
+ }
default:
super.handleMessage(message);
}
diff --git a/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java b/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java
index 662816b..cbfeff3 100644
--- a/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java
+++ b/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java
@@ -18,6 +18,7 @@ import android.os.RemoteException;
import com.orbekk.same.ClientInterface;
import com.orbekk.same.SameService;
import com.orbekk.same.State;
+import com.orbekk.same.State.Component;
import com.orbekk.same.StateChangedListener;
import com.orbekk.same.UpdateConflict;
import com.orbekk.same.VariableFactory;
@@ -113,9 +114,19 @@ public class ClientInterfaceBridge implements ClientInterface {
@Override
public void set(String name, String data, long revision) throws UpdateConflict {
- logger.info("set({}, {}, {}",
- new Object[]{name, data, revision});
- throw new RuntimeException("Not implemented.");
+ set(new Component(name, revision, data));
+ }
+
+ @Override
+ public void set(Component component) throws UpdateConflict {
+ Message message = Message.obtain(null, SameService.SET_STATE);
+ message.obj = component;
+ try {
+ serviceMessenger.send(message);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ throw new UpdateConflict(e.getMessage());
+ }
}
@Override
@@ -131,4 +142,5 @@ public class ClientInterfaceBridge implements ClientInterface {
public VariableFactory createVariableFactory() {
return VariableFactory.create(this);
}
+
}
diff --git a/same/src/main/java/com/orbekk/same/Client.java b/same/src/main/java/com/orbekk/same/Client.java
index 244a64d..b496aac 100644
--- a/same/src/main/java/com/orbekk/same/Client.java
+++ b/same/src/main/java/com/orbekk/same/Client.java
@@ -9,6 +9,7 @@ import org.codehaus.jackson.type.TypeReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.orbekk.same.State.Component;
import com.orbekk.util.WorkQueue;
public class Client implements DiscoveryListener {
@@ -50,6 +51,12 @@ public class Client implements DiscoveryListener {
}
@Override
+ public void set(Component component) throws UpdateConflict {
+ set(component.getName(), component.getData(),
+ component.getRevision());
+ }
+
+ @Override
public void addStateListener(StateChangedListener listener) {
stateListeners.add(listener);
}
diff --git a/same/src/main/java/com/orbekk/same/ClientInterface.java b/same/src/main/java/com/orbekk/same/ClientInterface.java
index 99adf21..4b4c731 100644
--- a/same/src/main/java/com/orbekk/same/ClientInterface.java
+++ b/same/src/main/java/com/orbekk/same/ClientInterface.java
@@ -3,6 +3,7 @@ package com.orbekk.same;
public interface ClientInterface {
State getState();
void set(String name, String data, long revision) throws UpdateConflict;
+ void set(State.Component component) throws UpdateConflict;
void addStateListener(StateChangedListener listener);
void removeStateListener(StateChangedListener listener);
} \ No newline at end of file