X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxserver.C;h=d7044b146ff524976a148014c40cc83271d52fb3;hb=dad1fc66e44a4dad94eb1e9ffd5736bf8f59ae6d;hp=b6c3e96d28a06ac8e085fe3701900406e0386ee7;hpb=c4be10e3ce3d338462dcca49aad510860e68f0f0;p=lyx.git diff --git a/src/lyxserver.C b/src/lyxserver.C index b6c3e96d28..d7044b146f 100644 --- a/src/lyxserver.C +++ b/src/lyxserver.C @@ -42,10 +42,6 @@ #include #include -#ifdef __GNUG__ -#pragma implementation -#endif - #include "lyxserver.h" #include "lyx_main.h" #include "debug.h" @@ -214,7 +210,7 @@ void LyXComm::endPipe(int & fd, string const & filename, bool write) if (!write) { lyx_gui::remove_read_callback(fd); } - + #ifdef __EMX__ APIRET rc; int errnum; @@ -272,38 +268,40 @@ void LyXComm::read_ready() if (status > 0) { charbuf[status] = '\0'; // turn it into a c string read_buffer_ += rtrim(charbuf, "\r"); - - } else if (errno != EAGAIN) { + // commit any commands read + while (read_buffer_.find('\n') != string::npos) { + // split() grabs the entire string if + // the delim /wasn't/ found. ?:-P + string cmd; + read_buffer_= split(read_buffer_, cmd,'\n'); + lyxerr[Debug::LYXSERVER] + << "LyXComm: status:" << status + << ", read_buffer_:" << read_buffer_ + << ", cmd:" << cmd << endl; + if (!cmd.empty()) + clientcb(client, cmd); + //\n or not \n? + } + } + if (errno == EAGAIN) { + errno = 0; + return; + } + if (errno != 0) { + lyxerr << "LyXComm: " << strerror(errno) << endl; if (!read_buffer_.empty()) { lyxerr << "LyXComm: truncated command: " - << read_buffer_ << '\n' - << "Resetting connection" << endl; + << read_buffer_ << endl; read_buffer_.erase(); } - - // reset connection - closeConnection(); - openConnection(); - break; - - } else { - // errno == EAGAIN - // Nothing new has arrived, so now's the time - // to tell the outside world if there's anything - // in the read buffer. - break; + break; // reset connection } } - if (!read_buffer_.empty()) { - read_buffer_ = rtrim(read_buffer_, "\n"); - lyxerr[Debug::LYXSERVER] - << "LyXComm: Received from fd " - << infd << '\n' - << '\"' << read_buffer_ << '\"' << endl; - clientcb(client, read_buffer_); - } - + // The connection gets reset in errno != EAGAIN + // Why does it need to be reset if errno == 0? + closeConnection(); + openConnection(); errno = 0; } @@ -384,7 +382,8 @@ void LyXServer::callback(LyXServer * serv, string const & msg) if (compare(p, "LYXSRV:", 7) == 0) { server_only = true; } else if (0 != compare(p, "LYXCMD:", 7)) { - lyxerr << "LyXServer: Unknown request \"" << p << "\"" << endl; + lyxerr << "LyXServer: Unknown request \"" + << p << '"' << endl; return; } p += 7; @@ -460,7 +459,7 @@ void LyXServer::callback(LyXServer * serv, string const & msg) } } else { lyxerr <<"LyXServer: Undefined server command " - << cmd << "." << endl; + << cmd << '.' << endl; } return; } @@ -486,7 +485,7 @@ void LyXServer::callback(LyXServer * serv, string const & msg) buf = "ERROR:"; else buf = "INFO:"; - buf += client + ":" + cmd + ":" + rval + "\n"; + buf += client + ':' + cmd + ':' + rval + '\n'; serv->pipes.send(buf); // !!! we don't do any error checking -