package com.ibm.jactors.test;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.ibm.jactors.DefaultMessage;
import com.ibm.jactors.Message;
/**
* An Actor that constructs items.
*
* @author BFEIGENB
*
*/
public class ConsumerActor extends TestableActor {
@Override
public void activate() {
logger.trace("ConsumerActor activate: %s", this);
super.activate();
}
@Override
public void deactivate() {
logger.trace("ConsumerActor deactivate: %s", this);
DefaultActorTest.dumpMessages(messages);
super.deactivate();
}
Map<String, Integer> expected = new ConcurrentHashMap<String, Integer>();
@Override
protected void loopBody(Message m) {
// logger.trace("ConsumerActor:%s loopBody %s: %s", getName(), m,
// this);
String subject = m.getSubject();
if ("construct".equals(subject)) {
String type = (String) m.getData();
// logger.trace("ConsumerActor:%s construct %s; pending=%d",
// getName(), type, messages.size());
logger.trace("ConsumerActor:%s constructing %s", getName(), type);
delay(type); // takes ~ 1 to N seconds
DefaultMessage xm = new DefaultMessage("constructionComplete", type);
// logger.info("ConsumerActor:%s reply to %s", getName(),
// m.getSource());
getManager().send(xm, this, m.getSource());
} else if ("init".equals(subject)) {
// nothing to do
} else {
logger.warning("ConsumerActor:%s loopBody unknown subject: %s", getName(), subject);
}
}
protected void delay(String type) {
int delay = 1;
for (int i = 0; i < DefaultActorTest.getItemTypes().length; i++) {
if (DefaultActorTest.getItemTypes()[i].equals(type)) {
break;
}
delay++;
}
DefaultActorTest.sleeper(DefaultActorTest.nextInt(delay) + 1);
// sleep(100);
}
}