summaryrefslogtreecommitdiff
path: root/same/src/main/java/com/orbekk/same/discovery/DiscoveryService.java
diff options
context:
space:
mode:
Diffstat (limited to 'same/src/main/java/com/orbekk/same/discovery/DiscoveryService.java')
-rw-r--r--same/src/main/java/com/orbekk/same/discovery/DiscoveryService.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/same/src/main/java/com/orbekk/same/discovery/DiscoveryService.java b/same/src/main/java/com/orbekk/same/discovery/DiscoveryService.java
new file mode 100644
index 0000000..a1147cc
--- /dev/null
+++ b/same/src/main/java/com/orbekk/same/discovery/DiscoveryService.java
@@ -0,0 +1,52 @@
+package com.orbekk.same.discovery;
+
+import java.net.DatagramPacket;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.orbekk.net.BroadcastListener;
+
+public class DiscoveryService extends Thread {
+ private Logger logger = LoggerFactory.getLogger(getClass());
+ BroadcastListener broadcastListener;
+ DiscoveryListener listener;
+
+ public DiscoveryService(DiscoveryListener listener,
+ BroadcastListener broadcastListener) {
+ this.listener = listener;
+ this.broadcastListener = broadcastListener;
+ }
+
+ @Override
+ public void run() {
+ logger.info("DiscoveryService starting.");
+ while (!Thread.interrupted()) {
+ DatagramPacket packet = broadcastListener.listen();
+ if (packet == null) {
+ // An error or interrupt occurred.
+ continue;
+ }
+ String content = new String(packet.getData(), 0, packet.getLength());
+ String[] words = content.split(" ");
+
+ if (!content.startsWith("Discover") || words.length < 2) {
+ logger.warn("Invalid discovery message: {}", content);
+ continue;
+ }
+
+ String url = words[1];
+ logger.info("Received discovery from {}", url);
+ if (listener != null) {
+ listener.discover(url);
+ }
+ }
+ logger.info("DiscoveryService stopped.");
+ }
+
+ @Override public void interrupt() {
+ logger.info("Interrupt()");
+ super.interrupt();
+ broadcastListener.interrupt();
+ }
+}