1 #ifndef R2C2_NET_CLIENT_H_
2 #define R2C2_NET_CLIENT_H_
4 #include <msp/io/eventdispatcher.h>
5 #include <msp/net/communicator.h>
6 #include "libr2c2/catalogue.h"
13 class Client: Msp::Net::PacketReceiver<DriverStatePacket>,
14 Msp::Net::PacketReceiver<EmergencyPacket>,
15 Msp::Net::PacketReceiver<TrainInfoPacket>,
16 Msp::Net::PacketReceiver<TrainFunctionPacket>,
17 Msp::Net::PacketReceiver<TrainControlPacket>,
18 Msp::Net::PacketReceiver<TrainStatusPacket>,
19 Msp::Net::PacketReceiver<RouteInfoPacket>,
20 Msp::Net::PacketReceiver<TrainRoutePacket>,
21 Msp::Net::PacketReceiver<ErrorPacket>
24 sigc::signal<void, bool> signal_power_changed;
25 sigc::signal<void, bool> signal_halt_changed;
26 sigc::signal<void, const std::string &> signal_emergency;
27 sigc::signal<void, NetTrain &> signal_train_added;
28 sigc::signal<void, const std::string &> signal_error;
31 const Catalogue &catalogue;
33 Msp::Net::StreamSocket *socket;
34 Msp::Net::Communicator *comm;
35 Msp::IO::EventDispatcher *event_disp;
38 std::list<std::string> routes;
39 std::map<unsigned, NetTrain *> trains;
42 Client(const Catalogue &);
45 void use_event_dispatcher(Msp::IO::EventDispatcher &);
46 void connect(const Msp::Net::SockAddr &);
49 void send(const P &pkt)
50 { if(comm) comm->send(pkt); }
52 const Catalogue &get_catalogue() const { return catalogue; }
53 const std::list<std::string> &get_routes() const { return routes; }
56 NetTrain &get_train(unsigned) const;
57 const std::map<unsigned, NetTrain *> &get_trains() const { return trains; }
60 virtual void receive(const DriverStatePacket &);
61 virtual void receive(const EmergencyPacket &);
62 virtual void receive(const TrainInfoPacket &);
63 virtual void receive(const TrainControlPacket &);
64 virtual void receive(const TrainFunctionPacket &);
65 virtual void receive(const TrainStatusPacket &);
66 virtual void receive(const RouteInfoPacket &);
67 virtual void receive(const TrainRoutePacket &);
68 virtual void receive(const ErrorPacket &);