package com.netifera.platform.net.internal.daemon.sniffing;
import com.netifera.platform.api.dispatcher.IMessenger;
import com.netifera.platform.api.dispatcher.MessengerException;
import com.netifera.platform.net.internal.daemon.probe.CaptureFileProgress;
import com.netifera.platform.net.sniffing.ICaptureFileInterface;
import com.netifera.platform.net.sniffing.util.ICaptureFileProgress;
public class CaptureFileRunnable implements Runnable {
private final static long SEND_INTERVAL = 20;
private final IMessenger messenger;
private final ICaptureFileInterface captureFileInterface;
private final ICaptureFileProgress progress;
private final SniffingDaemon daemon;
private final long spaceId;
public CaptureFileRunnable(IMessenger messenger, ICaptureFileInterface iface,
SniffingDaemon daemon, long spaceId) {
this.messenger = messenger;
this.progress = createProgress();
this.captureFileInterface = iface;
this.daemon = daemon;
this.spaceId = spaceId;
}
public ICaptureFileProgress getProgress() {
return progress;
}
private ICaptureFileProgress createProgress() {
return new ICaptureFileProgress() {
private long messageCounter = 0;
public void error(String message, Throwable e) {
sendMessage(CaptureFileProgress.createError(message));
// XXX
}
public void finished() {
sendMessage(CaptureFileProgress.createFinished());
}
public boolean updateProgress(int percent, int count) {
messageCounter++;
if(messageCounter % SEND_INTERVAL == 0) {
sendMessage(CaptureFileProgress.createUpdate(percent, count));
}
return true;
}
private void sendMessage(CaptureFileProgress progressMessage) {
try {
messenger.emitMessage(progressMessage);
} catch (MessengerException e) {
Thread.currentThread().interrupt();
}
}
};
}
public void run() {
daemon.runCaptureFile(spaceId, captureFileInterface, progress);
}
}