/*
* PeriodicMulticastSender.java
*
* Created on den 5 september 2001, 13:12
*/
package ip1.u4.net;
import java.net.*;
import java.io.*;
/** Skapar ny PeriodicMulticastSender.
*/
public class PeriodicMulticastSender implements Runnable {
/** Meddelandet som skall sändas.
*/
private DatagramPacket message = null;
/** socketen som meddelandet skickas via.
*/
private MulticastSocket sender = null;
/** meddelande skickas med period ms mellanrum.
*/
private int period;
/** referens till tråden som ser till att meddelanden skickas.
*/
private Thread thread = null;
/** bestämmer om tråden skall leva eller inte.
*/
private boolean running;
/** Adressen som meddelandet skickas till.
*/
private InetAddress address;
/** Porten som meddelandet skickas till.
*/
private int port;
/** Skapar ny PeriodicMulticastSender.
* @param address Internetadressen som PeriodicMulticastSender sänder mot.
* @param port porten som PeriodicMulticastSender sänder mot.
* @param period Tiden i ms mellan varje utsändning.
* @param message Meddelandet som sänds ut.
*/
public PeriodicMulticastSender(InetAddress address, int port, int period, String message) {
this.address = address;
this.port = port;
this.period = period;
this.setMessage(message);
}
/** Startar den periodiska utsändningen.
* @throws IOException Slängs om öppnandet av MulticastSocket misslyckas.
*/
public void start() throws IOException {
sender = new MulticastSocket(port);
running = true;
thread = new Thread(this);
thread.start();
}
/** Avslutar den periodiska utsändningen. Utsändningen kan åtestartas med
* {@link #start()}.
*/
public void stop() {
running = false;
sender.close();
}
/** Ändrar meddelandet som sänds ut
* @param m meddelandet som sänds till multicastadressen.
*/
synchronized public void setMessage(String m) {
byte[] bm = m.getBytes();
message = new DatagramPacket(bm, bm.length, address, port);
}
/** Returnerar meddelandet som sänds ut
* @return meddelandet
*/
public String getMessage() {
return new String(message.getData(), 0, message.getLength());
}
/** Ändrar tiden mellan utsändningarna.
* @param period Tid i ms mellan varje utsändning.
*/
public void setPeriod(int period) {
this.period = period;
}
/** Returnerar tiden mellan varje utsändning.
* @return tiden i ms mellan utsändningarna
*/
public int getPeriod() {
return period;
}
/** Returnerar utsändningsadressen som en sträng
* @return Utsändningsadressen
*/
public String getAddress() {
return address.getHostAddress();
}
/** Returnerar utsändningsporten
* @return utsändningsporten
*/
public int getPort() {
return port;
}
/** Implementation av interfacet Runnable
*/
public void run() {
while(running) {
try {
sender.send(message);
thread.sleep(period);
} catch(IOException e) {
System.err.println(e);
} catch(InterruptedException e) {
System.err.println(e);
}
}
}
}