use of com.birbit.android.jobqueue.messaging.message.CommandMessage in project android-priority-jobqueue by yigit.
the class MessageQueueTestBase method addMessageOnIdle.
private void addMessageOnIdle(final boolean delayed) throws InterruptedException {
final MockTimer timer = new MockTimer();
final MessageQueue mq = createMessageQueue(timer, new MessageFactory());
final CountDownLatch idleLatch = new CountDownLatch(1);
final CountDownLatch runLatch = new CountDownLatch(1);
final MessageQueueConsumer mqConsumer = new MessageQueueConsumer() {
@Override
public void handleMessage(Message message) {
if (message.type == Type.COMMAND && ((CommandMessage) message).getWhat() == CommandMessage.POKE) {
runLatch.countDown();
}
}
@Override
public void onIdle() {
if (idleLatch.getCount() == 1) {
CommandMessage cm = new CommandMessage();
cm.set(CommandMessage.POKE);
if (delayed) {
mq.postAt(cm, timer.nanoTime() + 100000);
} else {
mq.post(cm);
}
idleLatch.countDown();
}
}
};
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
mq.consume(mqConsumer);
}
});
thread.start();
assertThat(idleLatch.await(10, TimeUnit.SECONDS), CoreMatchers.is(true));
timer.incrementMs(1000000);
assertThat(runLatch.await(10, TimeUnit.SECONDS), CoreMatchers.is(true));
mq.stop();
thread.join(5000);
if (thread.isAlive()) {
threadDump.failed(new AssertionFailedError("thread did not die"), null);
}
assertThat(thread.isAlive(), CoreMatchers.is(false));
}
use of com.birbit.android.jobqueue.messaging.message.CommandMessage in project android-priority-jobqueue by yigit.
the class MessageQueueTestBase method recycleOnClear.
@Test
public void recycleOnClear() {
MessageFactory factory = spy(new MessageFactory());
MockTimer mockTimer = new MockTimer();
T mq = createMessageQueue(mockTimer, factory);
CommandMessage cm = factory.obtain(CommandMessage.class);
cm.set(CommandMessage.POKE);
mq.post(cm);
mq.clear();
verify(factory).release(cm);
}
use of com.birbit.android.jobqueue.messaging.message.CommandMessage in project android-priority-jobqueue by yigit.
the class MessageQueueTestBase method postAtNoIdleCall.
@Test
public void postAtNoIdleCall() throws InterruptedException {
final MockTimer timer = new MockTimer();
final MessageQueue mq = createMessageQueue(timer, new MessageFactory());
final CountDownLatch idleLatch = new CountDownLatch(1);
final CountDownLatch firstIdleLatch = new CountDownLatch(1);
final CountDownLatch runLatch = new CountDownLatch(1);
final MessageQueueConsumer mqConsumer = new MessageQueueConsumer() {
@Override
public void handleMessage(Message message) {
if (message.type == Type.COMMAND && ((CommandMessage) message).getWhat() == CommandMessage.POKE) {
runLatch.countDown();
}
}
@Override
public void onIdle() {
if (firstIdleLatch.getCount() == 1) {
firstIdleLatch.countDown();
} else {
idleLatch.countDown();
}
}
};
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
mq.consume(mqConsumer);
}
});
thread.start();
firstIdleLatch.await();
CommandMessage cm = new CommandMessage();
cm.set(CommandMessage.POKE);
mq.postAt(cm, 100);
assertThat(idleLatch.await(3, TimeUnit.SECONDS), CoreMatchers.is(false));
timer.incrementNs(100);
assertThat(idleLatch.await(3, TimeUnit.SECONDS), CoreMatchers.is(true));
mq.stop();
thread.join();
}
use of com.birbit.android.jobqueue.messaging.message.CommandMessage in project android-priority-jobqueue by yigit.
the class CallbackManager method destroy.
public void destroy() {
if (!started.get()) {
return;
}
CommandMessage message = factory.obtain(CommandMessage.class);
message.set(CommandMessage.QUIT);
messageQueue.post(message);
}
use of com.birbit.android.jobqueue.messaging.message.CommandMessage in project android-priority-jobqueue by yigit.
the class CallbackManager method start.
private void start() {
Thread callbackThread = new Thread(new Runnable() {
@Override
public void run() {
messageQueue.consume(new MessageQueueConsumer() {
long lastDelivery = Long.MIN_VALUE;
@Override
public void onStart() {
}
@Override
public void handleMessage(Message message) {
if (message.type == Type.CALLBACK) {
CallbackMessage cm = (CallbackMessage) message;
deliverMessage(cm);
lastDelivery = timer.nanoTime();
} else if (message.type == Type.CANCEL_RESULT_CALLBACK) {
deliverCancelResult((CancelResultMessage) message);
lastDelivery = timer.nanoTime();
} else if (message.type == Type.COMMAND) {
CommandMessage command = (CommandMessage) message;
final int what = command.getWhat();
if (what == CommandMessage.QUIT) {
messageQueue.stop();
started.set(false);
} else if (what == CommandMessage.RUNNABLE) {
command.getRunnable().run();
}
} else if (message.type == Type.PUBLIC_QUERY) {
((PublicQueryMessage) message).getCallback().onResult(0);
}
}
@Override
public void onIdle() {
}
});
}
}, "job-manager-callbacks");
try {
callbackThread.start();
} catch (InternalError error) {
// process is already dying, no reason to crash for this (and hide the real crash)
JqLog.e(error, "Cannot start a thread. Looks like app is shutting down." + "See issue #294 for details.");
}
}
Aggregations