public URI search(Filter filter,
long timeout,
TimeUnit unit) throws IOException {
timeout = unit.convert(timeout, TimeUnit.MILLISECONDS);
long waited = 0;
byte[] buf = new byte[BUFF_SIZE];
DatagramPacket packet = new DatagramPacket(buf, 0, buf.length);
while (timeout == 0 || waited < timeout){
long start = System.currentTimeMillis();
try {
multicast.receive(packet);
if (packet.getLength() > 0) {
String str = new String(packet.getData(), packet.getOffset(), packet.getLength());
URI service = URI.create(str);
if (service != null && filter.accept(service)) {
return service;
}
}
} finally {
long stop = System.currentTimeMillis();
waited += stop - start;
}
}
return null;
}
|