package igmp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import org.apache.log4j.Logger;
import sip.UAS;
public class IGMPSender extends IGMPComponent {
// Name des Loggers
public static final String TAG = "IGMPSender";
// Loggerinstanz
private static final Logger LOGGER = Logger.getLogger(TAG);
// private static final byte TTL = 1;
private UAS uas;
public IGMPSender() {
super();
buf = "Steenbuck Harms".getBytes();
pack = new DatagramPacket(buf, buf.length);
}
/**
* Initialisiert den MulticastSocket
*
* @param ip
* IPAdresse der Multicastgruppe
* @param port
* Port auf den
* @throws IOException
* Fehler beim erzeugen des IPAdressen-Objekts oder Port
*/
public void initialize(InetAddress ip, int port, UAS uas) throws IOException {
this.uas = uas;
// Socket anlegen
mSocket = new MulticastSocket();
// Datagram mit Zielsocket versehen
pack.setAddress(ip);
pack.setPort(port);
// IP und Port für später speichern
mcastAdr = ip;
this.port = port;
}
@Override
public void run() {
LOGGER.debug("run()");
LOGGER.debug("isRunning: " + isRunning);
while (isRunning) {
try {
if (uas.sessionCount() > 0) {
mSocket.send(pack);
LOGGER.debug("Nachricht erfolgreich gesendet: " + new String(buf));
} else {
LOGGER.debug("Keine Nachricht gesendet, weil session count <= 0");
}
Thread.sleep(2000);
} catch (IOException e) {
LOGGER.error("Fehler beim Senden der Nachrichten an die MulticastGruppe: " + e);
stop();
} catch (InterruptedException e) {
LOGGER.error("Fehler beim Sleep des Threads: " + e);
stop();
}
}
LOGGER.debug("Schleife beendet");
try {
mSocket.leaveGroup(mcastAdr);
} catch (IOException e) {
LOGGER.error("Fehler beim verlassend er Multicastgruppe: " + e);
} finally {
mSocket.close();
}
LOGGER.debug("MulticastSocket abgebaut");
}
}