]> git.tdb.fi Git - r2c2.git/blob - source/network/client.h
Add a new remote control program with GLtk-based UI
[r2c2.git] / source / network / client.h
1 #ifndef R2C2_NET_CLIENT_H_
2 #define R2C2_NET_CLIENT_H_
3
4 #include <msp/io/eventdispatcher.h>
5 #include <msp/net/communicator.h>
6 #include "libr2c2/catalogue.h"
7 #include "packets.h"
8 #include "protocol.h"
9 #include "train.h"
10
11 namespace R2C2 {
12
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<TrainAIControlPacket>,
19         Msp::Net::PacketReceiver<TrainStatusPacket>,
20         Msp::Net::PacketReceiver<RouteInfoPacket>,
21         Msp::Net::PacketReceiver<TrainRoutePacket>,
22         Msp::Net::PacketReceiver<ErrorPacket>
23 {
24 public:
25         sigc::signal<void, bool> signal_power_changed;
26         sigc::signal<void, bool> signal_halt_changed;
27         sigc::signal<void, const std::string &> signal_emergency;
28         sigc::signal<void, NetTrain &> signal_train_added;
29         sigc::signal<void, const std::string &> signal_error;
30
31 private:
32         Catalogue &catalogue;
33         Protocol proto;
34         Msp::Net::StreamSocket *socket;
35         Msp::Net::Communicator *comm;
36         Msp::IO::EventDispatcher *event_disp;
37         bool power;
38         bool halt;
39         std::list<std::string> routes;
40         std::map<unsigned, NetTrain *> trains;
41
42 public:
43         Client(Catalogue &);
44         ~Client();
45
46         void use_event_dispatcher(Msp::IO::EventDispatcher &);
47         void connect(const Msp::Net::SockAddr &);
48
49         template<typename P>
50         void send(const P &pkt)
51         { if(comm) comm->send(pkt); }
52
53         Catalogue &get_catalogue() const { return catalogue; }
54         const std::list<std::string> &get_routes() const { return routes; }
55         void set_power(bool);
56         void set_halt(bool);
57         bool get_power() const { return power; }
58         bool get_halt() const { return halt; }
59         NetTrain &get_train(unsigned) const;
60         const std::map<unsigned, NetTrain *> &get_trains() const { return trains; }
61
62 private:
63         virtual void receive(const DriverStatePacket &);
64         virtual void receive(const EmergencyPacket &);
65         virtual void receive(const TrainInfoPacket &);
66         virtual void receive(const TrainControlPacket &);
67         virtual void receive(const TrainFunctionPacket &);
68         virtual void receive(const TrainAIControlPacket &);
69         virtual void receive(const TrainStatusPacket &);
70         virtual void receive(const RouteInfoPacket &);
71         virtual void receive(const TrainRoutePacket &);
72         virtual void receive(const ErrorPacket &);
73 };
74
75 } // namespace R2C2
76
77 #endif