X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxserver.h;h=4952411b1fd1da8cbf1d9e9592d99ee719805d81;hb=fb424bae1b693200ba4a506b2775929d25d77be3;hp=1e58cd90657e2cc035a6bed153170b8547ef6cb5;hpb=132fe5e1322fbc86a32692df51eba78d6b4e479c;p=lyx.git diff --git a/src/lyxserver.h b/src/lyxserver.h index 1e58cd9065..4952411b1f 100644 --- a/src/lyxserver.h +++ b/src/lyxserver.h @@ -5,7 +5,7 @@ * LyX, The Document Processor * * Copyright 1995 Matthias Ettrich -* Copyright 1995-2000 The LyX Team. +* Copyright 1995-2001 The LyX Team. * * ====================================================== */ @@ -29,8 +29,7 @@ class LyXServer; This class encapsulates all the dirty communication and thus provides a clean string interface. */ -class LyXComm -{ +class LyXComm { public: /** When we receive a message, we send it to a client. This is one of the small things that would have been a lot @@ -39,9 +38,8 @@ public: typedef void (*ClientCallbackfct)(LyXServer *, string const &); /// Construct with pipe-basename and callback to receive messages - LyXComm(string const &pip, LyXServer * cli, ClientCallbackfct ccb = 0) - :pipename(pip), client(cli), clientcb(ccb) - { + LyXComm(string const & pip, LyXServer * cli, ClientCallbackfct ccb = 0) + : pipename(pip), client(cli), clientcb(ccb) { ready = false; openConnection(); } @@ -51,6 +49,9 @@ public: closeConnection(); } + /// clean up in emergency + void emergencyCleanup(); + /// Send message void send(string const &); @@ -58,12 +59,28 @@ public: static void callback(int fd, void *v); private: + /// the filename of the in pipe + string const inPipeName() { + return pipename + ".in"; + } + + /// the filename of the out pipe + string const outPipeName() { + return pipename + ".out"; + } + /// Open pipes void openConnection(); /// Close pipes void closeConnection(); + /// start a pipe + int startPipe(string const &, bool); + + /// finish a pipe + void endPipe(int &, string const &); + /// This is -1 if not open int infd; @@ -85,35 +102,46 @@ private: /* --- prototypes -------------------------------------------------------- */ -class LyXServer -{ +/// +class LyXServer { public: // FIXME IN 0.13 // Hack! This should be changed in 0.13 - /// The lyx server should not take an argument "LyXFunc" but this is + // The lyx server should not take an argument "LyXFunc" but this is // how it will be done for 0.12. In 0.13 we must write a non-gui // bufferview. // IMO lyxserver is atypical, and for the moment the only one, non-gui // bufferview. We just have to find a way to handle situations like if // lyxserver is using a buffer that is being edited with a bufferview. // With a common buffer list this is not a problem, maybe. (Alejandro) - LyXServer(LyXFunc *f, string const &pip) - : numclients(0), func(f), pipes(pip, (this), callback) - { } + /// + LyXServer(LyXFunc * f, string const & pip) + : numclients(0), func(f), pipes(pip, (this), callback) {} /// ~LyXServer(); /// void notifyClient(string const &); + + /// whilst crashing etc. + void emergencyCleanup() { + pipes.emergencyCleanup(); + } + private: /// static void callback(LyXServer *, string const & msg); /// Names and number of current clients - enum { MAX_CLIENTS = 10 }; + enum { + /// + MAX_CLIENTS = 10 + }; + /// string clients[MAX_CLIENTS]; + /// int numclients; /// - LyXFunc *func; + LyXFunc * func; /// LyXComm pipes; };