Added basic auto discovery functionality

- Servers can advertise themselves
- Clients can detect servers on their local network

Tags: #story[1247]
This commit is contained in:
Michael Rausch
2017-08-30 22:53:45 +12:00
parent 5fb8a0c2c1
commit 262f27fa8a
4 changed files with 109 additions and 0 deletions
@@ -0,0 +1,56 @@
package seng302.visualiser;
import seng302.gameServer.ServerAdvertiser;
import javax.jmdns.JmDNS;
import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceListener;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class ServerListener{
private static ServerListener instance;
private ServerListenerDelegate delegate;
private JmDNS jmdns = null;
private class GameServerListener implements ServiceListener {
GameServerListener(){
System.out.println("Created GSL instance");
}
@Override
public void serviceAdded(ServiceEvent event) {
delegate.serverDetected(event.getName(), "", 123, event.getInfo().getInet4Addresses().toString());
}
@Override
public void serviceRemoved(ServiceEvent event) {
delegate.serverRemoved(event.getName());
}
@Override
public void serviceResolved(ServiceEvent event) {
// Do nothing
}
}
private ServerListener() throws IOException {
jmdns = JmDNS.create(InetAddress.getLocalHost());
jmdns.addServiceListener(ServerAdvertiser.SERVICE_TYPE, new GameServerListener());
}
public static ServerListener getInstance() throws IOException {
if (instance == null){
instance = new ServerListener();
}
return instance;
}
public void setDelegate(ServerListenerDelegate delegate){
this.delegate = delegate;
}
}
@@ -0,0 +1,6 @@
package seng302.visualiser;
public interface ServerListenerDelegate {
void serverDetected(String serverName, String mapName, Integer placesLeft, String serverAddress);
void serverRemoved(String serverName);
}