X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FServerSocket.cpp;h=3d73a67ed6d955c08318323357856f5ec10aa8f9;hb=030326466f72828727ddf3309cac13761c5b59ab;hp=59d18267b3d1018eba0df7e91014de4769062a63;hpb=a1e991a82ea76d66aaca4e781df920d20bed59b0;p=lyx.git diff --git a/src/ServerSocket.cpp b/src/ServerSocket.cpp index 59d18267b3..3d73a67ed6 100644 --- a/src/ServerSocket.cpp +++ b/src/ServerSocket.cpp @@ -18,8 +18,8 @@ #include "DispatchResult.h" #include "FuncRequest.h" +#include "LyX.h" #include "LyXAction.h" -#include "LyXFunc.h" #include "frontends/Application.h" @@ -28,7 +28,7 @@ #include "support/FileName.h" #include "support/socktools.h" -#include +#include "support/bind.h" #include #include @@ -40,16 +40,14 @@ using namespace std; using namespace lyx::support; -using boost::shared_ptr; 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, FileName const & addr) - : func(f), - fd_(socktools::listen(addr, 3)), +ServerSocket::ServerSocket(FileName const & addr) + : fd_(socktools::listen(addr, 3)), address_(addr) { if (fd_ == -1) { @@ -61,15 +59,15 @@ ServerSocket::ServerSocket(LyXFunc * f, FileName const & addr) // Needed by xdvi setEnv("XEDITOR", "lyxclient -g %f %l"); // Needed by lyxclient - setEnv("LYXSOCKET", address_.absFilename()); + 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()); + << fd_ << ' ' << address_.absFileName()); } @@ -91,7 +89,7 @@ ServerSocket::~ServerSocket() string const ServerSocket::address() const { - return address_.absFilename(); + return address_.absFileName(); } @@ -116,7 +114,7 @@ void ServerSocket::serverCallback() shared_ptr(new LyXDataSocket(client_fd)); theApp()->registerSocketCallback( client_fd, - boost::bind(&ServerSocket::dataCallback, + bind(&ServerSocket::dataCallback, this, client_fd) ); } @@ -126,8 +124,10 @@ void ServerSocket::serverCallback() // if the connection has been closed void ServerSocket::dataCallback(int fd) { - shared_ptr client = clients[fd]; - + map >::const_iterator it = clients.find(fd); + if (it == clients.end()) + return; + shared_ptr client = it->second; string line; size_t pos; bool saidbye = false; @@ -142,8 +142,10 @@ void ServerSocket::dataCallback(int fd) string const key = line.substr(0, pos); if (key == "LYXCMD") { string const cmd = line.substr(pos + 1); + FuncRequest fr(lyxaction.lookupFunc(cmd)); + fr.setOrigin(FuncRequest::LYXSERVER); DispatchResult dr; - func->dispatch(lyxaction.lookupFunc(cmd), dr); + theApp()->dispatch(fr, dr); string const rval = to_utf8(dr.message()); if (dr.error()) client->writeln("ERROR:" + cmd + ':' + rval); @@ -190,7 +192,7 @@ 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"; // map >::const_iterator client = clients.begin(); // map >::const_iterator end = clients.end();