Search in sources :

Example 11 with Actor

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());
}
Also used : CountDownLatch(java.util.concurrent.CountDownLatch) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Consumer(java.util.function.Consumer) Actor(actor4j.core.actors.Actor) ActorMessage(actor4j.core.messages.ActorMessage) UUID(java.util.UUID) ActorFactory(actor4j.core.utils.ActorFactory) Test(org.junit.Test)

Example 12 with Actor

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());
}
Also used : CountDownLatch(java.util.concurrent.CountDownLatch) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Consumer(java.util.function.Consumer) Actor(actor4j.core.actors.Actor) ActorMessage(actor4j.core.messages.ActorMessage) UUID(java.util.UUID) ActorFactory(actor4j.core.utils.ActorFactory) Test(org.junit.Test)

Example 13 with Actor

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());
}
Also used : CountDownLatch(java.util.concurrent.CountDownLatch) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Consumer(java.util.function.Consumer) Actor(actor4j.core.actors.Actor) ActorMessage(actor4j.core.messages.ActorMessage) UUID(java.util.UUID) ActorFactory(actor4j.core.utils.ActorFactory) Test(org.junit.Test)

Example 14 with Actor

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());
}
Also used : CountDownLatch(java.util.concurrent.CountDownLatch) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Consumer(java.util.function.Consumer) Actor(actor4j.core.actors.Actor) ActorMessage(actor4j.core.messages.ActorMessage) UUID(java.util.UUID) ActorFactory(actor4j.core.utils.ActorFactory) Test(org.junit.Test)

Example 15 with Actor

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();
    }
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ReentrantLock(java.util.concurrent.locks.ReentrantLock) Actor(actor4j.core.actors.Actor) ActorGroupMember(actor4j.core.actors.ActorGroupMember) ActorDistributedGroupMember(actor4j.core.actors.ActorDistributedGroupMember) UUID(java.util.UUID) ActorCell(actor4j.core.ActorCell) List(java.util.List) Lock(java.util.concurrent.locks.Lock) ActorThread(actor4j.core.ActorThread) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) Queue(java.util.Queue) ConcurrentLinkedQueue(java.util.concurrent.ConcurrentLinkedQueue) ActorGroupMember(actor4j.core.actors.ActorGroupMember) Actor(actor4j.core.actors.Actor) ActorDistributedGroupMember(actor4j.core.actors.ActorDistributedGroupMember)

Aggregations

Actor (actor4j.core.actors.Actor)16 UUID (java.util.UUID)12 CountDownLatch (java.util.concurrent.CountDownLatch)10 Test (org.junit.Test)10 ActorFactory (actor4j.core.utils.ActorFactory)8 ActorMessage (actor4j.core.messages.ActorMessage)7 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)5 Consumer (java.util.function.Consumer)5 ActorSystem (actor4j.core.ActorSystem)3 PseudoActor (actor4j.core.actors.PseudoActor)3 ActorInitializationException (actor4j.core.exceptions.ActorInitializationException)3 ActorCell (actor4j.core.ActorCell)2 ActorDistributedGroupMember (actor4j.core.actors.ActorDistributedGroupMember)2 ActorGroupMember (actor4j.core.actors.ActorGroupMember)2 ResourceActor (actor4j.core.actors.ResourceActor)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 ActorThread (actor4j.core.ActorThread)1 ActorTimer (actor4j.core.ActorTimer)1 EmbeddedActor (actor4j.core.actors.EmbeddedActor)1 PersistentActor (actor4j.core.actors.PersistentActor)1