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