]> git.tdb.fi Git - r2c2.git/blobdiff - source/network/client.h
Make Client hold a non-const reference to the Catalogue
[r2c2.git] / source / network / client.h
index ce8dcb66fc15cdb681157b57d3b5e50b968741fc..02931e553d69a9efc1a8afed0d4714da924654f2 100644 (file)
@@ -1,40 +1,45 @@
-/* $Id$
-
-This file is part of the MSP Märklin suite
-Copyright © 2009  Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
-#ifndef MARKLINNET_CLIENT_H_
-#define MARKLINNET_CLIENT_H_
+#ifndef R2C2_NET_CLIENT_H_
+#define R2C2_NET_CLIENT_H_
 
 #include <msp/io/eventdispatcher.h>
 #include <msp/net/communicator.h>
-#include "libmarklin/catalogue.h"
+#include "libr2c2/catalogue.h"
 #include "packets.h"
 #include "protocol.h"
 #include "train.h"
 
-namespace Marklin {
+namespace R2C2 {
 
-class Client: public Msp::Net::PacketReceiver<TrainInfoPacket>,
-       Msp::Net::PacketReceiver<TrainSpeedPacket>,
+class Client: Msp::Net::PacketReceiver<DriverStatePacket>,
+       Msp::Net::PacketReceiver<EmergencyPacket>,
+       Msp::Net::PacketReceiver<TrainInfoPacket>,
        Msp::Net::PacketReceiver<TrainFunctionPacket>,
-       Msp::Net::PacketReceiver<TrainStatusPacket>
+       Msp::Net::PacketReceiver<TrainControlPacket>,
+       Msp::Net::PacketReceiver<TrainStatusPacket>,
+       Msp::Net::PacketReceiver<RouteInfoPacket>,
+       Msp::Net::PacketReceiver<TrainRoutePacket>,
+       Msp::Net::PacketReceiver<ErrorPacket>
 {
 public:
+       sigc::signal<void, bool> signal_power_changed;
+       sigc::signal<void, bool> signal_halt_changed;
+       sigc::signal<void, const std::string &> signal_emergency;
        sigc::signal<void, NetTrain &> signal_train_added;
+       sigc::signal<void, const std::string &> signal_error;
 
 private:
-       const Catalogue &catalogue;
+       Catalogue &catalogue;
        Protocol proto;
        Msp::Net::StreamSocket *socket;
        Msp::Net::Communicator *comm;
        Msp::IO::EventDispatcher *event_disp;
+       bool power;
+       bool halt;
+       std::list<std::string> routes;
        std::map<unsigned, NetTrain *> trains;
 
 public:
-       Client(const Catalogue &);
+       Client(Catalogue &);
        ~Client();
 
        void use_event_dispatcher(Msp::IO::EventDispatcher &);
@@ -44,16 +49,25 @@ public:
        void send(const P &pkt)
        { if(comm) comm->send(pkt); }
 
-       const Catalogue &get_catalogue() const { return catalogue; }
-       NetTrain &get_train(unsigned);
+       Catalogue &get_catalogue() const { return catalogue; }
+       const std::list<std::string> &get_routes() const { return routes; }
+       void set_power(bool);
+       void set_halt(bool);
+       NetTrain &get_train(unsigned) const;
+       const std::map<unsigned, NetTrain *> &get_trains() const { return trains; }
 
 private:
+       virtual void receive(const DriverStatePacket &);
+       virtual void receive(const EmergencyPacket &);
        virtual void receive(const TrainInfoPacket &);
-       virtual void receive(const TrainSpeedPacket &);
+       virtual void receive(const TrainControlPacket &);
        virtual void receive(const TrainFunctionPacket &);
        virtual void receive(const TrainStatusPacket &);
+       virtual void receive(const RouteInfoPacket &);
+       virtual void receive(const TrainRoutePacket &);
+       virtual void receive(const ErrorPacket &);
 };
 
-} // namespace Marklin
+} // namespace R2C2
 
 #endif