/* * MulticastReceiver.java * * Created on den 6 september 2001, 17:02 */ package ip1.u4.net; import java.net.*; import java.io.*; /** Tar emot multicastmeddelanden från angiven adress på specificerad poer. * MulticastReceiver ligger i en egen tråd, när meddelande uppfångats * skickas det vidare till en DatagramReceiver för vidare prosessning. * * @author Henrik Johansson * @version 1.0 * @see DatagramReceiver */ public class MulticastReceiver implements Runnable { private DatagramReceiver receiver = null; private InetAddress address = null; private int port; private MulticastSocket socket; private boolean running; /** Skapar ny MulticastReceiver. Denna anmäler sig till multicastadressen * address och lyssnar på port port, mottagna meddelanden * skickas vidare till receiver. * * @param address Adressen MulticastReceiver anmäler sig till. * @param port port MulticastReceiver lyssnar på. * @param receiver DatagramReceiver som prosessar meddelanden. * @throws IOException Kastas om MulticastReceiver inte kan anmäla sig till * multicastadressen address */ public MulticastReceiver(InetAddress address, int port, DatagramReceiver receiver) throws IOException{ this.address = address; this.port = port; this.receiver = receiver; socket = new MulticastSocket(port); socket.joinGroup(address); running = true; (new Thread(this)).start(); } /** Stänger av MulticastReseiver. Porten stängd och kan inte återöppnas * utan att ny instans skapas. */ public void close() { running = false; socket.close(); } /** För att få veta multicastadressen MulticastReceiver anmält sig till. * @return adress MulticastReceiver anmält sig till. */ public String getHost() { return address.getHostAddress(); } /** För att få veta porten MulticastReceiver lyssnar på. * @return port MulticastReceiver lyssnar på. */ public int getPort() { return port; } /** implementation av Runnableinterfacet */ public void run() { while(running) { try { DatagramPacket m = new DatagramPacket(new byte[1024], 1024); socket.receive(m); receiver.processMessage(m); } catch(IOException e) { System.err.println(e); } } } }