2 /* This file is part of
3 * ======================================================
5 * LyX, The Document Processor
7 * Copyright 1995 Matthias Ettrich
8 * Copyright 1995-2001 The LyX Team.
10 * ====================================================== */
23 /* --- i/o pipes --------------------------------------------------------- */
25 /** This class managed the pipes used for communicating with clients.
26 Usage: Initialize with pipe-filename-base, client class to receive
27 messages, and callback-function that will be called with the messages.
28 When you want to send, use "send()".
29 This class encapsulates all the dirty communication and thus provides
30 a clean string interface.
34 /** When we receive a message, we send it to a client.
35 This is one of the small things that would have been a lot
36 cleaner with a Signal/Slot thing.
38 typedef void (*ClientCallbackfct)(LyXServer *, string const &);
40 /// Construct with pipe-basename and callback to receive messages
41 LyXComm(string const & pip, LyXServer * cli, ClientCallbackfct ccb = 0)
42 : pipename(pip), client(cli), clientcb(ccb) {
53 void send(string const &);
55 /// We receive messages via XForms through this callback
56 static void callback(int fd, void *v);
60 void openConnection();
63 void closeConnection();
65 /// This is -1 if not open
68 /// This is -1 if not open
71 /// Are we up and running?
74 /// Base of pipename including path
80 /// The client callback function
81 ClientCallbackfct clientcb;
85 /* --- prototypes -------------------------------------------------------- */
90 // Hack! This should be changed in 0.13
92 // The lyx server should not take an argument "LyXFunc" but this is
93 // how it will be done for 0.12. In 0.13 we must write a non-gui
95 // IMO lyxserver is atypical, and for the moment the only one, non-gui
96 // bufferview. We just have to find a way to handle situations like if
97 // lyxserver is using a buffer that is being edited with a bufferview.
98 // With a common buffer list this is not a problem, maybe. (Alejandro)
100 LyXServer(LyXFunc * f, string const & pip)
101 : numclients(0), func(f), pipes(pip, (this), callback) {}
105 void notifyClient(string const &);
108 static void callback(LyXServer *, string const & msg);
109 /// Names and number of current clients
115 string clients[MAX_CLIENTS];
124 #endif /* _LYXSERVER_H_ */
126 /* === End of File: lyxserver.h ========================================== */