]> git.tdb.fi Git - r2c2.git/blob - source/network/client.h
Export routes over network
[r2c2.git] / source / network / client.h
1 /* $Id$
2
3 This file is part of the MSP Märklin suite
4 Copyright © 2009  Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
6 */
7
8 #ifndef MARKLINNET_CLIENT_H_
9 #define MARKLINNET_CLIENT_H_
10
11 #include <msp/io/eventdispatcher.h>
12 #include <msp/net/communicator.h>
13 #include "libmarklin/catalogue.h"
14 #include "packets.h"
15 #include "protocol.h"
16 #include "train.h"
17
18 namespace Marklin {
19
20 class Client: public Msp::Net::PacketReceiver<TrainInfoPacket>,
21         Msp::Net::PacketReceiver<TrainSpeedPacket>,
22         Msp::Net::PacketReceiver<TrainFunctionPacket>,
23         Msp::Net::PacketReceiver<TrainStatusPacket>,
24         Msp::Net::PacketReceiver<RouteInfoPacket>,
25         Msp::Net::PacketReceiver<TrainRoutePacket>
26 {
27 public:
28         sigc::signal<void, NetTrain &> signal_train_added;
29
30 private:
31         const Catalogue &catalogue;
32         Protocol proto;
33         Msp::Net::StreamSocket *socket;
34         Msp::Net::Communicator *comm;
35         Msp::IO::EventDispatcher *event_disp;
36         std::list<std::string> routes;
37         std::map<unsigned, NetTrain *> trains;
38
39 public:
40         Client(const Catalogue &);
41         ~Client();
42
43         void use_event_dispatcher(Msp::IO::EventDispatcher &);
44         void connect(const Msp::Net::SockAddr &);
45
46         template<typename P>
47         void send(const P &pkt)
48         { if(comm) comm->send(pkt); }
49
50         const Catalogue &get_catalogue() const { return catalogue; }
51         const std::list<std::string> &get_routes() const { return routes; }
52         NetTrain &get_train(unsigned);
53
54 private:
55         virtual void receive(const TrainInfoPacket &);
56         virtual void receive(const TrainSpeedPacket &);
57         virtual void receive(const TrainFunctionPacket &);
58         virtual void receive(const TrainStatusPacket &);
59         virtual void receive(const RouteInfoPacket &);
60         virtual void receive(const TrainRoutePacket &);
61 };
62
63 } // namespace Marklin
64
65 #endif