]> git.tdb.fi Git - r2c2.git/blob - source/network/train.h
948af2f82b5dfc45d94da55e8bcfcdcc139559ac
[r2c2.git] / source / network / train.h
1 #ifndef R2C2_NET_TRAIN_H_
2 #define R2C2_NET_TRAIN_H_
3
4 #include <sigc++/signal.h>
5 #include "libr2c2/vehicletype.h"
6 #include "packets.h"
7
8 namespace R2C2 {
9
10 class Client;
11
12 class NetTrain
13 {
14 public:
15         sigc::signal<void, const std::string &> signal_name_changed;
16         sigc::signal<void, const std::string &, float> signal_control_changed;
17         sigc::signal<void, unsigned, bool> signal_function_changed;
18         sigc::signal<void, const std::string &> signal_route_changed;
19         sigc::signal<void, const std::string &> signal_status_changed;
20
21 private:
22         Client &client;
23         const VehicleType &loco_type;
24         unsigned address;
25         std::string name;
26         std::map<std::string, float> controls;
27         unsigned functions;
28         std::string route;
29         std::string status;
30
31 public:
32         NetTrain(Client &, const TrainInfoPacket &);
33
34         const VehicleType &get_loco_type() const { return loco_type; }
35         unsigned get_address() const { return address; }
36         const std::string &get_name() const { return name; }
37         void set_control(const std::string &, float);
38         float get_control(const std::string &) const;
39         void set_function(unsigned, bool);
40         bool get_function(unsigned i) const { return (functions>>i)&1; }
41         void set_route(const std::string &);
42         const std::string &get_route() const { return route; }
43
44         void process_packet(const TrainControlPacket &);
45         void process_packet(const TrainFunctionPacket &);
46         void process_packet(const TrainRoutePacket &);
47         void process_packet(const TrainStatusPacket &);
48 };
49
50 } // namespace R2C2
51
52 #endif