package org.schmivits.airball.airdata;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.util.Arrays;
import android.util.Log;
public class UdpListener extends NetworkListener {
private static final String TAG = UdpListener.class.getName();
public UdpListener(int port, PacketListener listener) {
super(port, listener);
}
@Override
public void run() {
final DatagramSocket s;
try {
s = new DatagramSocket(mPort);
} catch (SocketException e) {
Log.e(TAG, "socket setup threw", e);
return;
}
try {
s.setSoTimeout(TIMEOUT);
final byte[] buffer = new byte[BUFFER_SIZE];
final DatagramPacket p = new DatagramPacket(buffer, buffer.length);
while (mRunning) {
try {
s.receive(p);
mListener.packetReceived(
Arrays.copyOfRange(buffer, p.getOffset(), p.getLength()));
} catch (SocketTimeoutException e) {
// On exception, we keep trying in the loop until we are asked
// to stop() explicitly.
} catch (IOException e) {
break;
}
}
} catch (SocketException e) {
// Fall through
} finally {
s.close();
}
}
}