X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnetwork%2Fclient.cpp;h=15d0b407691fbb3e526f365aa877b55d105aa053;hb=53712fb06be78cb6383ed8a54467dad7aebbf369;hp=4eb4b25f5aefdd81498cd06a66b78925426b03f8;hpb=010d8321e982d1684fcbff5bf6fc2bdec7cb7bae;p=r2c2.git diff --git a/source/network/client.cpp b/source/network/client.cpp index 4eb4b25..15d0b40 100644 --- a/source/network/client.cpp +++ b/source/network/client.cpp @@ -1,22 +1,18 @@ -/* $Id$ - -This file is part of the MSP Märklin suite -Copyright © 2009 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - +#include #include "client.h" using namespace std; using namespace Msp; -namespace Marklin { +namespace R2C2 { -Client::Client(const Catalogue &c): +Client::Client(Catalogue &c): catalogue(c), socket(0), comm(0), - event_disp(0) + event_disp(0), + power(false), + halt(false) { } Client::~Client() @@ -43,12 +39,44 @@ void Client::connect(const Net::SockAddr &addr) comm = new Net::Communicator(*socket, proto, *this); } -NetTrain &Client::get_train(unsigned addr) +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 +{ + 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) { - map::iterator i = trains.find(addr); - if(i==trains.end()) - throw KeyError("Unknown train"); - return *i->second; + signal_emergency.emit(pkt.message); } void Client::receive(const TrainInfoPacket &pkt) @@ -58,7 +86,7 @@ void Client::receive(const TrainInfoPacket &pkt) signal_train_added.emit(*train); } -void Client::receive(const TrainSpeedPacket &pkt) +void Client::receive(const TrainControlPacket &pkt) { get_train(pkt.address).process_packet(pkt); } @@ -68,9 +96,29 @@ void Client::receive(const TrainFunctionPacket &pkt) get_train(pkt.address).process_packet(pkt); } +void Client::receive(const TrainAIControlPacket &pkt) +{ + get_train(pkt.address).process_packet(pkt); +} + void Client::receive(const TrainStatusPacket &pkt) { get_train(pkt.address).process_packet(pkt); } -} // namespace Marklin +void Client::receive(const RouteInfoPacket &pkt) +{ + routes.push_back(pkt.name); +} + +void Client::receive(const TrainRoutePacket &pkt) +{ + get_train(pkt.address).process_packet(pkt); +} + +void Client::receive(const ErrorPacket &pkt) +{ + signal_error.emit(pkt.message); +} + +} // namespace R2C2