#include "libr2c2/driver.h"
#include "libr2c2/route.h"
#include "libr2c2/train.h"
+#include "libr2c2/trainrouter.h"
+#include "libr2c2/trainstatus.h"
#include "libr2c2/vehicletype.h"
#include "server.h"
{
train.signal_control_changed.connect(sigc::bind<0>(sigc::mem_fun(this, &Server::train_control_changed), sigc::ref(train)));
train.signal_function_changed.connect(sigc::bind<0>(sigc::mem_fun(this, &Server::train_function_changed), sigc::ref(train)));
- train.signal_route_changed.connect(sigc::bind<0>(sigc::mem_fun(this, &Server::train_route_changed), sigc::ref(train)));
- train.signal_status_changed.connect(sigc::bind<0>(sigc::mem_fun(this, &Server::train_status_changed), sigc::ref(train)));
+ train.signal_ai_event.connect(sigc::bind<0>(sigc::mem_fun(this, &Server::train_ai_event), sigc::ref(train)));
TrainInfoPacket pkt;
pkt.address = train.get_address();
send(pkt);
}
-void Server::train_route_changed(const Train &train, const Route *route)
+void Server::train_ai_event(const Train &train, TrainAI &, const TrainAI::Message &ev)
{
- TrainRoutePacket pkt;
- pkt.address = train.get_address();
- if(route)
- pkt.route = route->get_name();
- send(pkt);
+ if(ev.type=="route-changed")
+ {
+ TrainRoutePacket pkt;
+ pkt.address = train.get_address();
+ if(const Route *route = ev.value.value<const Route *>())
+ pkt.route = route->get_name();
+ send(pkt);
+ }
}
void Server::train_status_changed(const Train &train, const string &status)
pkt.status = status->get_status();
comm.send(pkt);
}
- if(train.get_route())
+ if(TrainRouter *router = dynamic_cast<TrainRouter *>(train.get_tagged_ai("router")))
{
TrainRoutePacket pkt;
pkt.address = train.get_address();
- pkt.route = train.get_route()->get_name();
+ pkt.route = router->get_route()->get_name();
comm.send(pkt);
}
}
{
Train &train = server.layout.get_train(pkt.address);
if(pkt.route.empty())
- train.set_route(0);
+ train.ai_message(TrainAI::Message("clear-route"));
else
{
Route &route = server.layout.get_route(pkt.route);
- train.set_route(&route);
+ train.ai_message(TrainAI::Message("set-route", &route));
}
}
catch(const exception &e)