]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/src/receiver.cpp
Agrego 2 ejemplos con problemas con la logica de control. El cliente la
[z.facultad/75.42/plaqui.git] / Server / src / receiver.cpp
index 8185727b8efd1c6da896df2054fd3dfbf348bf41..9133f85d4ed000bc1ab7e4d110861c8cd2aa363f 100644 (file)
@@ -43,29 +43,39 @@ 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);
        socket->bind(host.c_str(), port);
 }
 
 // XXX EL XML DEBE EMPEZAR Y FINALIZAR EN UNA LINEA SEPARADA.
-void Receiver::real_run(void) {
+void Receiver::real_run(void) throw() {
 #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) {
+                       signal_error().emit(e.serrno(), e.errstr());
+                       return;
+               }
                string sbuf = buf;
                if (in_frame) {
                        string::size_type pos = sbuf.find(FRAME_END);