package io.muoncore.discovery.multicast; import io.muoncore.Discovery; import io.muoncore.InstanceDescriptor; import io.muoncore.ServiceDescriptor; import io.muoncore.exception.MuonException; import io.muoncore.transport.ServiceCache; import java.io.IOException; import java.util.List; public class MulticastDiscovery implements Discovery { public static int PORT = 9898; public static String MULTICAST_ADDRESS = "224.1.7.8"; private ServiceCache serviceCache; private MulticastClient client; private MulticastServerThread server; public MulticastDiscovery(ServiceCache serviceCache) { this.serviceCache = serviceCache; this.client = new MulticastClient(serviceCache); client.start(); } @Override public List<ServiceDescriptor> getKnownServices() { return serviceCache.getServices(); } @Override public void advertiseLocalService(InstanceDescriptor descriptor) { if (server != null) throw new MuonException("Discovery is already advertising service"); try { this.server = new MulticastServerThread(descriptor); this.server.start(); } catch (IOException e) { e.printStackTrace(); } } @Override public void onReady(DiscoveryOnReady onReady) { onReady.call(); } @Override public void shutdown() { server.shutdown(); client.shutdown(); } }