49 lines
1.1 KiB
C++
49 lines
1.1 KiB
C++
#include "lib/mercury/executor/Executor.h"
|
|
#include "lib/mercury/broker/Broker.h"
|
|
#include "lib/mercury/broker/BrokerProxy.h"
|
|
#include "lib/mercury/actors/Actor.h"
|
|
#include "lib/mercury/actors/IPollableActor.h"
|
|
|
|
namespace bts {
|
|
namespace mercury {
|
|
|
|
Executor::Executor() :
|
|
_broker(),
|
|
_proxies(),
|
|
_actor_broker(make_proxy()),
|
|
_actors() {}
|
|
|
|
Executor::~Executor() {
|
|
for (auto &a : _actors)
|
|
a->deactivate();
|
|
}
|
|
|
|
void Executor::init_neighbours(std::vector<Executor*> const&neighbours)
|
|
{
|
|
std::vector<IRemoteBroker*> broker_neighbours;
|
|
for (auto e : neighbours)
|
|
if (e != this)
|
|
broker_neighbours.push_back(&e->make_proxy());
|
|
for (auto n : broker_neighbours)
|
|
_broker.add_neighbour(*n);
|
|
}
|
|
|
|
|
|
void Executor::activate(Actor *actor)
|
|
{
|
|
_actors.push_back(std::unique_ptr<Actor> (actor));
|
|
auto pollable = dynamic_cast<IPollableActor*> (actor);
|
|
if (pollable)
|
|
_pollable_actors.push_back(pollable);
|
|
actor->activate(_actor_broker);}
|
|
|
|
|
|
BrokerProxy& Executor::make_proxy()
|
|
{
|
|
_proxies.push_back(std::make_unique<BrokerProxy>(_broker));
|
|
return *_proxies.back();
|
|
}
|
|
|
|
} // namespace mercury
|
|
} // namespace bts
|