X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FServerSocket.cpp;h=9b19a57315ae8a117363ea243c2c4e0d6e6ad1a2;hb=badbd3dcc344f125e301a795c33d2c67cde8d97e;hp=0f96e2771a3c70f123ee5b102d671004eaa70591;hpb=d079c908b371284bfb32f1c3f60781f34a99b3e5;p=lyx.git diff --git a/src/ServerSocket.cpp b/src/ServerSocket.cpp index 0f96e2771a..9b19a57315 100644 --- a/src/ServerSocket.cpp +++ b/src/ServerSocket.cpp @@ -3,11 +3,11 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author Jean-Marc Lasgouttes * \author Angus Leeming * \author John Levon - * \author João Luis M. Assirati + * \author João Luis M. Assirati * * Full author contact details are available in file CREDITS. */ @@ -16,31 +16,30 @@ #include "ServerSocket.h" -#include "debug.h" +#include "DispatchResult.h" #include "FuncRequest.h" +#include "LyX.h" #include "LyXAction.h" -#include "LyXFunc.h" #include "frontends/Application.h" +#include "support/debug.h" #include "support/environment.h" #include "support/FileName.h" -#include "support/lyxlib.h" #include "support/socktools.h" -#include +#include "support/bind.h" #include +#include #if defined (_WIN32) # include #endif -using boost::shared_ptr; +using namespace std; +using namespace lyx::support; -using std::auto_ptr; -using std::endl; -using std::string; namespace lyx { @@ -48,29 +47,28 @@ namespace lyx { // Address is the unix address for the socket. // MAX_CLIENTS is the maximum number of clients // that can connect at the same time. -ServerSocket::ServerSocket(LyXFunc * f, support::FileName const & addr) - : func(f), - fd_(support::socktools::listen(addr, 3)), +ServerSocket::ServerSocket(FileName const & addr) + : fd_(socktools::listen(addr, 3)), address_(addr) { if (fd_ == -1) { - lyxerr << "lyx: Disabling LyX socket." << endl; + LYXERR(Debug::LYXSERVER, "lyx: Disabling LyX socket."); return; } // These env vars are used by DVI inverse search // Needed by xdvi - support::setEnv("XEDITOR", "lyxclient -g %f %l"); + setEnv("XEDITOR", "lyxclient -g %f %l"); // Needed by lyxclient - support::setEnv("LYXSOCKET", address_.toFilesystemEncoding()); + setEnv("LYXSOCKET", address_.absFileName()); theApp()->registerSocketCallback( fd_, - boost::bind(&ServerSocket::serverCallback, this) + bind(&ServerSocket::serverCallback, this) ); - LYXERR(Debug::LYXSERVER) << "lyx: New server socket " - << fd_ << ' ' << address_.absFilename() << endl; + LYXERR(Debug::LYXSERVER, "lyx: New server socket " + << fd_ << ' ' << address_.absFileName()); } @@ -82,16 +80,17 @@ ServerSocket::~ServerSocket() theApp()->unregisterSocketCallback(fd_); if (::close(fd_) != 0) lyxerr << "lyx: Server socket " << fd_ - << " IO error on closing: " << strerror(errno); + << " IO error on closing: " << strerror(errno) + << endl; } - support::unlink(address_); - LYXERR(Debug::LYXSERVER) << "lyx: Server socket quitting" << endl; + address_.removeFile(); + LYXERR(Debug::LYXSERVER, "lyx: Server socket quitting"); } string const ServerSocket::address() const { - return address_.absFilename(); + return address_.absFileName(); } @@ -99,11 +98,10 @@ string const ServerSocket::address() const // is OK and if the number of clients does not exceed MAX_CLIENTS void ServerSocket::serverCallback() { - int const client_fd = support::socktools::accept(fd_); + int const client_fd = socktools::accept(fd_); if (fd_ == -1) { - LYXERR(Debug::LYXSERVER) << "lyx: Failed to accept new client" - << endl; + LYXERR(Debug::LYXSERVER, "lyx: Failed to accept new client"); return; } @@ -117,7 +115,7 @@ void ServerSocket::serverCallback() shared_ptr(new LyXDataSocket(client_fd)); theApp()->registerSocketCallback( client_fd, - boost::bind(&ServerSocket::dataCallback, + bind(&ServerSocket::dataCallback, this, client_fd) ); } @@ -130,7 +128,7 @@ void ServerSocket::dataCallback(int fd) shared_ptr client = clients[fd]; string line; - string::size_type pos; + size_t pos; bool saidbye = false; while (!saidbye && client->readln(line)) { // The protocol must be programmed here @@ -143,13 +141,13 @@ void ServerSocket::dataCallback(int fd) string const key = line.substr(0, pos); if (key == "LYXCMD") { string const cmd = line.substr(pos + 1); - func->dispatch(lyxaction.lookupFunc(cmd)); - string const rval = to_utf8(func->getMessage()); - if (func->errorStat()) { + DispatchResult dr; + theApp()->dispatch(lyxaction.lookupFunc(cmd), dr); + string const rval = to_utf8(dr.message()); + if (dr.error()) client->writeln("ERROR:" + cmd + ':' + rval); - } else { + else client->writeln("INFO:" + cmd + ':' + rval); - } } else if (key == "HELLO") { // no use for client name! client->writeln("HELLO:"); @@ -191,10 +189,10 @@ void ServerSocket::writeln(string const & line) // void ServerSocket::dump() const // { // lyxerr << "ServerSocket debug dump.\n" -// << "fd = " << fd_ << ", address = " << address_.absFilename() << ".\n" +// << "fd = " << fd_ << ", address = " << address_.absFileName() << ".\n" // << "Clients: " << clients.size() << ".\n"; -// std::map >::const_iterator client = clients.begin(); -// std::map >::const_iterator end = clients.end(); +// map >::const_iterator client = clients.begin(); +// map >::const_iterator end = clients.end(); // for (; client != end; ++client) // lyxerr << "fd = " << client->first << '\n'; // } @@ -203,7 +201,7 @@ void ServerSocket::writeln(string const & line) LyXDataSocket::LyXDataSocket(int fd) : fd_(fd), connected_(true) { - LYXERR(Debug::LYXSERVER) << "lyx: New data socket " << fd_ << endl; + LYXERR(Debug::LYXSERVER, "lyx: New data socket " << fd_); } @@ -214,8 +212,7 @@ LyXDataSocket::~LyXDataSocket() << " IO error on closing: " << strerror(errno); theApp()->unregisterSocketCallback(fd_); - LYXERR(Debug::LYXSERVER) << "lyx: Data socket " << fd_ << " quitting." - << endl; + LYXERR(Debug::LYXSERVER, "lyx: Data socket " << fd_ << " quitting."); } @@ -240,8 +237,8 @@ bool LyXDataSocket::readln(string & line) // Error conditions. The buffer must still be // processed for lines read if (count == 0) { // EOF -- connection closed - LYXERR(Debug::LYXSERVER) << "lyx: Data socket " << fd_ - << ": connection closed." << endl; + LYXERR(Debug::LYXSERVER, "lyx: Data socket " << fd_ + << ": connection closed."); connected_ = false; } else if ((count == -1) && (errno != EAGAIN)) { // IO error lyxerr << "lyx: Data socket " << fd_ @@ -250,10 +247,10 @@ bool LyXDataSocket::readln(string & line) } // Cut a line from buffer - string::size_type pos = buffer_.find('\n'); + size_t pos = buffer_.find('\n'); if (pos == string::npos) { - LYXERR(Debug::LYXSERVER) << "lyx: Data socket " << fd_ - << ": line not completed." << endl; + LYXERR(Debug::LYXSERVER, "lyx: Data socket " << fd_ + << ": line not completed."); return false; // No complete line stored } line = buffer_.substr(0, pos);