pkt.name = train.get_name();
send(pkt);
- TrainStatus *status = new TrainStatus(train);
- status->set_tag("server:status");
- status->signal_changed.connect(sigc::bind<0>(sigc::mem_fun(this, &Server::train_status_changed), sigc::ref(train)));
+ if(!train.get_ai_of_type<TrainStatus>())
+ new TrainStatus(train);
}
void Server::train_control_changed(const Train &train, const string &control, float value)
pkt.route = route->get_name();
send(pkt);
}
-}
-
-void Server::train_status_changed(const Train &train, const string &status)
-{
- TrainStatusPacket pkt;
- pkt.address = train.get_address();
- pkt.status = status;
- send(pkt);
+ else if(ev.type=="status-changed")
+ {
+ TrainStatusPacket pkt;
+ pkt.address = train.get_address();
+ pkt.status = ev.value.value<std::string>();
+ send(pkt);
+ }
}
template<typename P>
pkt.functions = train.get_functions();
comm.send(pkt);
}
- if(TrainStatus *status = dynamic_cast<TrainStatus *>(train.get_tagged_ai("server:status")))
+ if(TrainStatus *status = train.get_ai_of_type<TrainStatus>())
{
TrainStatusPacket pkt;
pkt.address = train.get_address();
pkt.status = status->get_status();
comm.send(pkt);
}
- if(TrainRouter *router = dynamic_cast<TrainRouter *>(train.get_tagged_ai("router")))
+ if(TrainRouter *router = train.get_ai_of_type<TrainRouter>())
{
TrainRoutePacket pkt;
pkt.address = train.get_address();