package Multicast;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.NetworkInterface;
import java.util.Enumeration;
public abstract class MulticastSendingThread extends MulticastThread
{
private int intervalMilli;
public MulticastSendingThread(int port, String ip_group, int interval_milli)
{
super(port, ip_group);
this.setIntervalMilli(interval_milli);
}
@Override
public void run()
{
while (true)
{
try
{
byte[] bytes = this.getNextPacketBytes();
Enumeration element = NetworkInterface.getNetworkInterfaces();
while (element.hasMoreElements())
{
NetworkInterface netIf = (NetworkInterface) element.nextElement();
if (!netIf.getName().equals("lo") && netIf.getInetAddresses().hasMoreElements())
{
try
{
this.getSocket().setNetworkInterface(netIf);
this.getSocket().send(new DatagramPacket(bytes, bytes.length, this.getGroup(), this.getPort()));
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Thread.sleep(this.getIntervalMilli());
}
catch (IOException e)
{
try
{
this.clearSocket();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
catch (InterruptedException e)
{
return;
}
}
}
public void setIntervalMilli(int interval_milli)
{
this.intervalMilli = interval_milli;
}
public int getIntervalMilli()
{
return intervalMilli;
}
protected abstract byte[] getNextPacketBytes();
}