void Server::train_added(Train &train)
{
- train.signal_target_speed_changed.connect(sigc::bind<0>(sigc::mem_fun(this, &Server::train_speed_changed), sigc::ref(train)));
- train.signal_reverse_changed.connect(sigc::bind<0>(sigc::mem_fun(this, &Server::train_reverse_changed), sigc::ref(train)));
+ 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)));
send(pkt);
}
-void Server::train_speed_changed(const Train &train, unsigned speed)
+void Server::train_control_changed(const Train &train, const string &control, float value)
{
- TrainSpeedPacket pkt;
+ TrainControlPacket pkt;
pkt.address = train.get_address();
- pkt.speed = speed;
- pkt.reverse = train.get_reverse();
- send(pkt);
-}
-
-void Server::train_reverse_changed(const Train &train, bool reverse)
-{
- TrainSpeedPacket pkt;
- pkt.address = train.get_address();
- pkt.speed = train.get_target_speed();
- pkt.reverse = reverse;
+ pkt.control = control;
+ pkt.value = value;
send(pkt);
}
pkt.name = train.get_name();
comm.send(pkt);
}
- {
- TrainSpeedPacket pkt;
- pkt.address = train.get_address();
- pkt.speed = train.get_target_speed();
- pkt.reverse = train.get_reverse();
- comm.send(pkt);
- }
+ // XXX Need control enumeration to send control packets
{
TrainFunctionPacket pkt;
pkt.address = train.get_address();
stale = true;
}
-void Server::Connection::receive(const TrainSpeedPacket &pkt)
+void Server::Connection::receive(const TrainControlPacket &pkt)
{
try
{
Train &train = server.layout.get_train(pkt.address);
- if(pkt.reverse!=train.get_reverse())
- train.set_reverse(pkt.reverse);
- else
- train.set_speed(pkt.speed);
+ train.set_control(pkt.control, pkt.value);
}
catch(const Exception &e)
{