1 #ifndef R2C2_NET_SERVER_H_
2 #define R2C2_NET_SERVER_H_
4 #include <msp/io/eventdispatcher.h>
5 #include <msp/net/communicator.h>
6 #include <msp/net/streamsocket.h>
7 #include <msp/net/streamserversocket.h>
8 #include "libr2c2/layout.h"
9 #include "libr2c2/trainai.h"
18 struct Connection: Msp::Net::PacketReceiver<DriverStatePacket>,
19 Msp::Net::PacketReceiver<TrainControlPacket>,
20 Msp::Net::PacketReceiver<TrainFunctionPacket>,
21 Msp::Net::PacketReceiver<TrainAIControlPacket>,
22 Msp::Net::PacketReceiver<TrainRoutePacket>
25 Msp::Net::StreamSocket *socket;
26 Msp::Net::Communicator comm;
29 Connection(Server &, Msp::Net::StreamSocket *);
32 void handshake_done();
34 virtual void receive(const DriverStatePacket &);
35 virtual void receive(const TrainControlPacket &);
36 virtual void receive(const TrainFunctionPacket &);
37 virtual void receive(const TrainAIControlPacket &);
38 virtual void receive(const TrainRoutePacket &);
39 void comm_error(const std::exception &);
40 void error(const std::string &);
45 Msp::Net::StreamServerSocket listen_sock;
46 Msp::IO::EventDispatcher *event_disp;
47 std::vector<Connection *> connections;
53 void use_event_dispatcher(Msp::IO::EventDispatcher &);
55 void incoming_connection();
57 void driver_state_changed();
58 void emergency(Block *, const std::string &);
59 void train_added(Train &);
60 void train_control_changed(const Train &, const std::string &, float);
61 void train_function_changed(const Train &, unsigned, bool);
62 void train_ai_event(const Train &, TrainAI &, const TrainAI::Message &);