#include <msp/core/refptr.h>
#include <msp/net/inet.h>
#include <msp/net/resolve.h>
+#include "libr2c2/catalogue.h"
#include "libr2c2/driver.h"
#include "libr2c2/route.h"
#include "libr2c2/train.h"
send(pkt);
}
-void Server::emergency(const string &msg)
+void Server::emergency(Block *, const string &msg)
{
EmergencyPacket pkt;
pkt.message = msg;
TrainInfoPacket pkt;
pkt.address = train.get_address();
- pkt.loco_type = train.get_locomotive_type().get_article_number().str();
+ pkt.loco_type = layout.get_catalogue().get_name(&train.get_locomotive_type());
pkt.name = train.get_name();
send(pkt);
{
for(vector<Connection *>::const_iterator i=connections.begin(); i!=connections.end(); ++i)
if(!(*i)->stale && (*i)->comm.is_handshake_done())
- {
- try
- {
- (*i)->comm.send(pkt);
- }
- catch(...)
- {
- (*i)->stale = true;
- }
- }
+ (*i)->comm.send(pkt);
}
{
socket->signal_end_of_file.connect(sigc::mem_fun(this, &Connection::end_of_file));
comm.signal_handshake_done.connect(sigc::mem_fun(this, &Connection::handshake_done));
+ comm.signal_error.connect(sigc::mem_fun(this, &Connection::comm_error));
comm.initiate_handshake();
}
comm.send(pkt);
}
- const set<Route *> &routes = server.layout.get_routes();
+ const set<Route *> &routes = server.layout.get_all<Route>();
for(set<Route *>::const_iterator i=routes.begin(); i!=routes.end(); ++i)
if(!(*i)->is_temporary())
{
comm.send(pkt);
}
+ const Catalogue &cat = server.layout.get_catalogue();
const map<unsigned, Train *> &trains = server.layout.get_trains();
for(map<unsigned, Train *>::const_iterator i=trains.begin(); i!=trains.end(); ++i)
{
{
TrainInfoPacket pkt;
pkt.address = train.get_address();
- pkt.loco_type = train.get_locomotive_type().get_article_number().str();
+ pkt.loco_type = cat.get_name(&train.get_locomotive_type());
pkt.name = train.get_name();
comm.send(pkt);
}
}
}
+void Server::Connection::comm_error(const exception &)
+{
+ stale = true;
+}
+
void Server::Connection::error(const string &msg)
{
ErrorPacket pkt;