/*
* 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);
}
}
}
}