summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-03-06 14:50:40 +0100
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-03-06 14:50:40 +0100
commit87235f7b860d0281e6e87f58ca965c661e67aa1b (patch)
tree72c88f208ceb24ccb1a2c9b82507e87740f39c7a
parentb795cc1519d88a22d3d3a05d5a41e278b6ccf617 (diff)
Centralized discovery client on Android.
-rw-r--r--README.md5
-rw-r--r--same-android/src/main/java/com/orbekk/same/android/SameService.java31
2 files changed, 35 insertions, 1 deletions
diff --git a/README.md b/README.md
index d3de74d..4c418b4 100644
--- a/README.md
+++ b/README.md
@@ -45,6 +45,11 @@ try {
Pre-1.0: A release is a milestone in the project. Whenever the system seems to
be working fairly well, a commit is tagged as the release version.
+### Next release
+* Branch: master
+* Centralized network discovery: Enables network discovery on networks that
+ don't support UDP broadcasts.
+
### 0.2
* Tag: 0.2-new-main-screen
* Many Android related bugs were fixed. App is generally stable.
diff --git a/same-android/src/main/java/com/orbekk/same/android/SameService.java b/same-android/src/main/java/com/orbekk/same/android/SameService.java
index e526d51..9ed9ff1 100644
--- a/same-android/src/main/java/com/orbekk/same/android/SameService.java
+++ b/same-android/src/main/java/com/orbekk/same/android/SameService.java
@@ -24,6 +24,7 @@ import com.orbekk.same.StateChangedListener;
import com.orbekk.same.android.net.AndroidBroadcasterFactory;
import com.orbekk.same.android.net.Broadcaster;
import com.orbekk.same.config.Configuration;
+import com.orbekk.same.discovery.DirectoryService;
import com.orbekk.util.DelayedOperation;
public class SameService extends Service {
@@ -65,7 +66,9 @@ public class SameService extends Service {
final static int SERVICE_PORT = 15068;
final static int DISCOVERY_PORT = 15066;
-
+ final static String DIRECTORY_URL =
+ "http://flode.pvv.ntnu.no:15072/DirectoryService.json";
+
private Logger logger = LoggerFactory.getLogger(getClass());
private SameController sameController = null;
private Configuration configuration = null;
@@ -196,6 +199,30 @@ public class SameService extends Service {
}
}
+ private void findNetworks() {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ logger.info("Looking up networks.");
+ DirectoryService directory = sameController.getDirectory();
+ if (directory == null) {
+ logger.warn("No discovery service configured.");
+ return;
+ }
+ try {
+ List<String> networks = directory.getNetworks();
+ for (int i = 0; i < networks.size(); i += 2) {
+ String name = networks.get(i);
+ String url = networks.get(i + 1);
+ networkListener.notifyNetwork(name, url);
+ }
+ } catch (Exception e) {
+ logger.warn("Unable to contact discovery service.", e);
+ }
+ }
+ }).start();
+ }
+
private void initializeConfiguration() {
Properties properties = new Properties();
String localIp = new Broadcaster(this)
@@ -208,6 +235,7 @@ public class SameService extends Service {
properties.setProperty("enableDiscovery", "true");
properties.setProperty("discoveryPort", ""+DISCOVERY_PORT);
properties.setProperty("networkName", "AndroidNetwork");
+ properties.setProperty("directoryUrl", DIRECTORY_URL);
configuration = new Configuration(properties);
}
@@ -248,6 +276,7 @@ public class SameService extends Service {
sameController.getClient().setNetworkListener(networkListener);
sameController.getClient().getInterface()
.addStateListener(stateListener);
+ findNetworks();
} catch (Exception e) {
logger.error("Failed to start server", e);
}