Files
spark/src/lib/mercury/executor/Executor.cpp
T
2018-10-02 16:24:00 +00:00

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