- Locomotive &loco = server.trfc_mgr.get_control().get_locomotive(pkt.address);
- for(unsigned i=0; i<9; ++i)
- if(((pkt.functions^loco.get_functions())>>i)&1)
- loco.set_function(i, (pkt.functions>>i)&1);
+ try
+ {
+ Train &train = server.layout.get_train(pkt.address);
+ for(unsigned i=0; i<9; ++i)
+ if(((pkt.functions^train.get_functions())>>i)&1)
+ train.set_function(i, (pkt.functions>>i)&1);
+ }
+ catch(const exception &e)
+ {
+ error(e.what());
+ }
+}
+
+void Server::Connection::receive(const TrainRoutePacket &pkt)
+{
+ try
+ {
+ Train &train = server.layout.get_train(pkt.address);
+ if(pkt.route.empty())
+ train.ai_message(TrainAI::Message("clear-route"));
+ else
+ {
+ Route &route = server.layout.get_route(pkt.route);
+ train.ai_message(TrainAI::Message("set-route", &route));
+ }
+ }
+ catch(const exception &e)
+ {
+ error(e.what());
+ }
+}
+
+void Server::Connection::error(const string &msg)
+{
+ ErrorPacket pkt;
+ pkt.message = msg;
+ comm.send(pkt);