use of actor4j.core.actors.Actor in project actor4j-core by relvaner.
the class BehaviourFeature method test_stack_become_unbecomeAll.
@Test(timeout = 2000)
public void test_stack_become_unbecomeAll() {
CountDownLatch testDone = new CountDownLatch(1);
final AtomicBoolean[] behaviour = new AtomicBoolean[3];
for (int i = 0; i < behaviour.length; i++) behaviour[i] = new AtomicBoolean(false);
UUID dest = system.addActor(new ActorFactory() {
@Override
public Actor create() {
return new Actor() {
protected Consumer<ActorMessage<?>> newBehaviour1 = new Consumer<ActorMessage<?>>() {
@Override
public void accept(ActorMessage<?> t) {
behaviour[0].set(true);
become(newBehaviour2, false);
}
};
protected Consumer<ActorMessage<?>> newBehaviour2 = new Consumer<ActorMessage<?>>() {
@Override
public void accept(ActorMessage<?> t) {
behaviour[1].set(true);
unbecomeAll();
}
};
protected boolean first = true;
@Override
public void receive(ActorMessage<?> message) {
if (first) {
become(newBehaviour1);
first = false;
} else {
behaviour[2].set(true);
testDone.countDown();
}
}
};
}
});
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.start();
try {
testDone.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
system.shutdown(true);
assertEquals(true, behaviour[0].get());
assertEquals(true, behaviour[1].get());
assertEquals(true, behaviour[2].get());
}
use of actor4j.core.actors.Actor in project actor4j-core by relvaner.
the class BehaviourFeature method test_become_unbecome.
@Test(timeout = 2000)
public void test_become_unbecome() {
CountDownLatch testDone = new CountDownLatch(1);
final AtomicBoolean[] behaviour = new AtomicBoolean[2];
for (int i = 0; i < behaviour.length; i++) behaviour[i] = new AtomicBoolean(false);
UUID dest = system.addActor(new ActorFactory() {
@Override
public Actor create() {
return new Actor() {
protected Consumer<ActorMessage<?>> newBehaviour = new Consumer<ActorMessage<?>>() {
@Override
public void accept(ActorMessage<?> t) {
behaviour[0].set(true);
unbecome();
}
};
protected boolean first = true;
@Override
public void receive(ActorMessage<?> message) {
if (first) {
become(newBehaviour);
first = false;
} else {
behaviour[1].set(true);
testDone.countDown();
}
}
};
}
});
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.start();
try {
testDone.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
system.shutdown(true);
assertEquals(true, behaviour[0].get());
assertEquals(true, behaviour[1].get());
}
use of actor4j.core.actors.Actor in project actor4j-core by relvaner.
the class BehaviourFeature method test_become.
@Test(timeout = 2000)
public void test_become() {
CountDownLatch testDone = new CountDownLatch(1);
final AtomicBoolean behaviour = new AtomicBoolean(false);
UUID dest = system.addActor(new ActorFactory() {
@Override
public Actor create() {
return new Actor() {
protected Consumer<ActorMessage<?>> newBehaviour = new Consumer<ActorMessage<?>>() {
@Override
public void accept(ActorMessage<?> t) {
behaviour.set(true);
testDone.countDown();
}
};
@Override
public void receive(ActorMessage<?> message) {
become(newBehaviour);
}
};
}
});
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.start();
try {
testDone.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
system.shutdown(true);
assertEquals(true, behaviour.get());
}
use of actor4j.core.actors.Actor in project actor4j-core by relvaner.
the class BehaviourFeature method test_stack_become_unbecome.
@Test(timeout = 2000)
public void test_stack_become_unbecome() {
CountDownLatch testDone = new CountDownLatch(1);
final AtomicBoolean[] behaviour = new AtomicBoolean[2];
for (int i = 0; i < behaviour.length; i++) behaviour[i] = new AtomicBoolean(false);
UUID dest = system.addActor(new ActorFactory() {
@Override
public Actor create() {
return new Actor() {
protected Consumer<ActorMessage<?>> newBehaviour1 = new Consumer<ActorMessage<?>>() {
protected boolean first = true;
@Override
public void accept(ActorMessage<?> t) {
if (first) {
become(newBehaviour2, false);
first = false;
} else {
behaviour[1].set(true);
testDone.countDown();
}
}
};
protected Consumer<ActorMessage<?>> newBehaviour2 = new Consumer<ActorMessage<?>>() {
@Override
public void accept(ActorMessage<?> t) {
behaviour[0].set(true);
unbecome();
}
};
@Override
public void receive(ActorMessage<?> message) {
become(newBehaviour1);
}
};
}
});
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.send(new ActorMessage<Object>(null, 0, system.SYSTEM_ID, dest));
system.start();
try {
testDone.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
system.shutdown(true);
assertEquals(true, behaviour[0].get());
assertEquals(true, behaviour[1].get());
}
use of actor4j.core.actors.Actor in project actor4j-core by relvaner.
the class ActorBalancingOnRuntime method registerCell.
public void registerCell(Map<UUID, Long> cellsMap, List<Long> threadsList, Map<Long, ActorThread> threadsMap, Map<UUID, Long> groupsMap, Map<UUID, Integer> groupsDistributedMap, ActorCell cell) {
try {
lock.lock();
Actor actor = cell.getActor();
if (actor instanceof ActorGroupMember) {
Long threadId = groupsMap.get(((ActorGroupMember) actor).getGroupId());
if (threadId == null) {
threadId = pollThreadId(threadsMap);
groupsMap.put(((ActorGroupMember) actor).getGroupId(), threadId);
}
cellsMap.put(cell.getId(), threadId);
} else if (actor instanceof ActorDistributedGroupMember) {
Integer threadIndex = groupsDistributedMap.get(((ActorDistributedGroupMember) actor).getGroupId());
Long id = null;
if (threadIndex == null) {
id = threadsList.get(pollThreadIndex.get());
groupsDistributedMap.put(((ActorDistributedGroupMember) actor).getGroupId(), pollThreadIndex.get());
} else {
threadIndex++;
if (threadIndex == threadsMap.size())
threadIndex = 0;
groupsDistributedMap.put(((ActorDistributedGroupMember) actor).getGroupId(), threadIndex);
id = threadsList.get(threadIndex);
}
cellsMap.put(cell.getId(), id);
pollThreadIndex.updateAndGet((index) -> index == threadsList.size() - 1 ? 0 : index + 1);
} else
cellsMap.put(cell.getId(), pollThreadId(threadsMap));
} finally {
lock.unlock();
}
}
Aggregations