-/* $Id$
-
-This file is part of the MSP Märklin suite
-Copyright © 2009 Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
+#include <msp/core/maputils.h>
#include "client.h"
using namespace std;
using namespace Msp;
-namespace Marklin {
+namespace R2C2 {
Client::Client(const Catalogue &c):
catalogue(c),
socket(0),
comm(0),
- event_disp(0)
+ event_disp(0),
+ power(false),
+ halt(false)
{ }
Client::~Client()
comm = new Net::Communicator(*socket, proto, *this);
}
+void Client::set_power(bool p)
+{
+ DriverStatePacket pkt;
+ pkt.power = p;
+ pkt.halt = halt;
+ send(pkt);
+}
+
+void Client::set_halt(bool h)
+{
+ DriverStatePacket pkt;
+ pkt.power = power;
+ pkt.halt = h;
+ send(pkt);
+}
+
NetTrain &Client::get_train(unsigned addr) const
{
- map<unsigned, NetTrain *>::const_iterator i = trains.find(addr);
- if(i==trains.end())
- throw KeyError("Unknown train");
- return *i->second;
+ return *get_item(trains, addr);
+}
+
+void Client::receive(const DriverStatePacket &pkt)
+{
+ if(pkt.power!=power)
+ {
+ power = pkt.power;
+ signal_power_changed.emit(power);
+ }
+ if(pkt.halt!=halt)
+ {
+ halt = pkt.halt;
+ signal_halt_changed.emit(halt);
+ }
+}
+
+void Client::receive(const EmergencyPacket &pkt)
+{
+ signal_emergency.emit(pkt.message);
}
void Client::receive(const TrainInfoPacket &pkt)
signal_error.emit(pkt.message);
}
-} // namespace Marklin
+} // namespace R2C2