]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/src/receiver.cpp
* El cliente ahora refleja un poco mejor los datos del server
[z.facultad/75.42/plaqui.git] / Server / src / receiver.cpp
index 8185727b8efd1c6da896df2054fd3dfbf348bf41..22cc1a89d5a03a4b4bd5f524fd80efe7baf4a012 100644 (file)
@@ -43,14 +43,16 @@ const string Receiver::FRAME_END("</plantstatus>");
 
 Receiver::~Receiver(void) {
 #ifdef DEBUG
-       cerr << __FILE__ << ": destructor." << endl;
+       cerr << __FILE__ << "(" << __LINE__ << ")"
+               << ": destructor." << endl;
 #endif // DEBUG
 }
 
-Receiver::Receiver(const Connection::Port& port, const string& host):
-               Connection(sockbuf::sock_dgram, host, port) {
+Receiver::Receiver(const Connection::Port& port, const string& host)
+           throw(sockerr): Connection(sockbuf::sock_dgram, host, port) {
 #ifdef DEBUG
-       cerr << __FILE__ << ": port = " << port
+       cerr << __FILE__ << "(" << __LINE__ << ")"
+               << ": port = " << port
                << " | host = " << host << endl;
 #endif // DEBUG
        //socket->bind(port);
@@ -60,12 +62,21 @@ Receiver::Receiver(const Connection::Port& port, const string& host):
 // XXX EL XML DEBE EMPEZAR Y FINALIZAR EN UNA LINEA SEPARADA.
 void Receiver::real_run(void) {
 #ifdef DEBUG
-       cerr << __FILE__ << ": real_run." << endl;
+       cerr << __FILE__ << "(" << __LINE__ << ")"
+               << ": real_run." << endl;
 #endif // DEBUG
        char buf[BUFSIZ];
        bool in_frame = false;
        stringstream ss;
-       while (!stop && socket.getline(buf, BUFSIZ)) {
+       while (!stop) {
+               try {
+                       if (!socket.getline(buf, BUFSIZ)) {
+                               return; // Se terminó la transmision.
+                       }
+               } catch (const sockerr& e) {
+                       error(e.serrno(), e.errstr());
+                       return;
+               }
                string sbuf = buf;
                if (in_frame) {
                        string::size_type pos = sbuf.find(FRAME_END);