]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/ipc.h
even more interface fixes
[wxWidgets.git] / interface / wx / ipc.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: ipc.h
e54c96f1 3// Purpose: interface of wxConnection
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10 @class wxConnection
7c913512 11
23324ae1
FM
12 A wxConnection object represents the connection between a client
13 and a server. It is created by making a connection using a
14 wxClient object, or by the acceptance of a
15 connection by a wxServer object. The
16 bulk of a DDE-like (Dynamic Data Exchange) conversation is
17 controlled by calling members in a @b wxConnection object or
18 by overriding its members. The actual DDE-based implementation
19 using wxDDEConnection is available on Windows only, but a
20 platform-independent, socket-based version of this API is
21 available using wxTCPConnection, which has the same API.
7c913512 22
23324ae1
FM
23 An application should normally derive a new connection class from
24 wxConnection, in order to override the communication event
25 handlers to do something interesting.
7c913512 26
23324ae1
FM
27 @library{wxbase}
28 @category{FIXME}
7c913512 29
e54c96f1 30 @see wxClient, wxServer, @ref overview_ipcoverview "Interprocess communications
23324ae1
FM
31 overview"
32*/
33class wxConnection : public wxObject
34{
35public:
36 //@{
37 /**
38 Constructs a connection object. If no user-defined connection
39 object is to be derived from wxConnection, then the constructor
40 should not be called directly, since the default connection
41 object will be provided on requesting (or accepting) a
42 connection. However, if the user defines his or her own derived
43 connection object, the wxServer::OnAcceptConnection
7c913512 44 and/or wxClient::OnMakeConnection
23324ae1
FM
45 members should be replaced by functions which construct the new
46 connection object.
23324ae1
FM
47 If the arguments of the wxConnection constructor are void then
48 the wxConnection object manages its own connection buffer,
49 allocating memory as needed. A programmer-supplied buffer cannot
50 be increased if necessary, and the program will assert if it is
51 not large enough. The programmer-supplied buffer is included
52 mainly for backwards compatibility.
53 */
54 wxConnection();
7c913512 55 wxConnection(void* buffer, size_t size);
23324ae1
FM
56 //@}
57
58 //@{
59 /**
60 Called by the server application to advise the client of a change
61 in the data associated with the given item. Causes the client
62 connection's OnAdvise() member
63 to be called. Returns @true if successful.
64 */
65 bool Advise(const wxString& item, const void* data, size_t size,
66 wxIPCFormat format = wxIPC_PRIVATE);
7c913512
FM
67 bool Advise(const wxString& item, const char* data);
68 bool Advise(const wxString& item, const wchar_t* data);
69 bool Advise(const wxString& item, const wxString data);
23324ae1
FM
70 //@}
71
72 /**
73 Called by the client or server application to disconnect from the
7c913512 74 other program; it causes the OnDisconnect()
23324ae1
FM
75 message to be sent to the corresponding connection object in the
76 other program. Returns @true if successful or already disconnected.
77 The application that calls @b Disconnect must explicitly delete
78 its side of the connection.
79 */
80 bool Disconnect();
81
82 //@{
83 /**
84 Called by the client application to execute a command on the
85 server. Can also be used to transfer arbitrary data to the server
86 (similar to Poke() in
7c913512 87 that respect). Causes the server connection's OnExec()
23324ae1
FM
88 member to be called. Returns @true if successful.
89 */
90 bool Execute(const void* data, size_t size,
91 wxIPCFormat format = wxIPC_PRIVATE);
7c913512
FM
92 bool Execute(const char* data);
93 bool Execute(const wchar_t* data);
94 bool Execute(const wxString data);
23324ae1
FM
95 //@}
96
97 /**
98 Message sent to the client application when the server notifies
99 it of a change in the data associated with the given item, using
100 Advise().
101 */
102 virtual bool OnAdvise(const wxString& topic,
103 const wxString& item,
104 const void* data,
105 size_t size,
106 wxIPCFormat format);
107
108 /**
109 Message sent to the client or server application when the other
110 application notifies it to end the connection. The default
111 behaviour is to delete the connection object and return @true, so
112 applications should generally override @b OnDisconnect
113 (finally calling the inherited method as well) so that they know
114 the connection object is no longer available.
115 */
116 virtual bool OnDisconnect();
117
118 /**
119 Message sent to the server application when the client notifies
120 it to execute the given data, using Execute().
121 Note that there is no item associated with this message.
122 */
123 virtual bool OnExec(const wxString& topic, const wxString& data);
124
125 /**
126 Message sent to the server application when the client notifies it to
127 accept the given data.
128 */
129 virtual bool OnPoke(const wxString& topic, const wxString& item,
130 const void* data,
131 size_t size,
132 wxIPCFormat format);
133
134 /**
7c913512 135 Message sent to the server application when the client calls
23324ae1
FM
136 Request(). The
137 server's OnRequest() method
138 should respond by returning a character string, or @NULL to
139 indicate no data, and setting *size. The character string must of
140 course persist after the call returns.
141 */
142 virtual const void* OnRequest(const wxString& topic,
143 const wxString& item,
4cc4bfaf 144 size_t* size,
23324ae1
FM
145 wxIPCFormat format);
146
147 /**
148 Message sent to the server application by the client, when the client
149 wishes to start an 'advise loop' for the given topic and item. The
150 server can refuse to participate by returning @false.
151 */
152 virtual bool OnStartAdvise(const wxString& topic,
153 const wxString& item);
154
155 /**
156 Message sent to the server application by the client, when the client
157 wishes to stop an 'advise loop' for the given topic and item. The
158 server can refuse to stop the advise loop by returning @false, although
159 this doesn't have much meaning in practice.
160 */
161 virtual bool OnStopAdvise(const wxString& topic,
162 const wxString& item);
163
164 //@{
165 /**
166 Called by the client application to poke data into the server.
167 Can be used to transfer arbitrary data to the server. Causes the
168 server connection's OnPoke() member to
169 be called. If size is -1 the size is computed from the string
170 length of data.
23324ae1
FM
171 Returns @true if successful.
172 */
173 bool Poke(const wxString& item, const void* data, size_t size,
174 wxIPCFormat format = wxIPC_PRIVATE);
7c913512
FM
175 bool Poke(const wxString& item, const char* data);
176 bool Poke(const wxString& item, const wchar_t* data);
177 bool Poke(const wxString& item, const wxString data);
23324ae1
FM
178 //@}
179
180 /**
181 Called by the client application to request data from the server.
7c913512 182 Causes the server connection's OnRequest()
23324ae1
FM
183 member to be called. Size may be @NULL or a pointer to a variable
184 to receive the size of the requested item.
23324ae1
FM
185 Returns a character string (actually a pointer to the
186 connection's buffer) if successful, @NULL otherwise. This buffer
187 does not need to be deleted.
188 */
4cc4bfaf 189 const void* Request(const wxString& item, size_t* size,
23324ae1
FM
190 wxIPCFormat format = wxIPC_TEXT);
191
192 /**
193 Called by the client application to ask if an advise loop can be
7c913512 194 started with the server. Causes the server connection's
23324ae1
FM
195 OnStartAdvise()
196 member to be called. Returns @true if the server okays it, @false
197 otherwise.
198 */
199 bool StartAdvise(const wxString& item);
200
201 /**
202 Called by the client application to ask if an advise loop can be
7c913512 203 stopped. Causes the server connection's OnStopAdvise()
23324ae1
FM
204 member to be called. Returns @true if the server okays it, @false
205 otherwise.
206 */
207 bool StopAdvise(const wxString& item);
208};
209
210
e54c96f1 211
23324ae1
FM
212/**
213 @class wxClient
7c913512 214
23324ae1
FM
215 A wxClient object represents the client part of a client-server
216 DDE-like (Dynamic Data Exchange) conversation. The actual
217 DDE-based implementation using wxDDEClient is available on Windows
218 only, but a platform-independent, socket-based version of this
219 API is available using wxTCPClient, which has the same API.
7c913512 220
23324ae1
FM
221 To create a client which can communicate with a suitable server,
222 you need to derive a class from wxConnection and another from
223 wxClient. The custom wxConnection class will intercept
224 communications in a 'conversation' with a server, and the custom
225 wxClient is required so that a user-overridden
7c913512 226 wxClient::OnMakeConnection
23324ae1 227 member can return a wxConnection of the required class, when a
7c913512 228 connection is made. Look at the IPC sample and the
23324ae1
FM
229 @ref overview_ipcoverview "Interprocess communications overview" for
230 an example of how to do this.
7c913512 231
23324ae1
FM
232 @library{wxbase}
233 @category{FIXME}
7c913512 234
e54c96f1
FM
235 @see wxServer, wxConnection, @ref overview_ipcoverview "Interprocess
236 communications overview"
23324ae1
FM
237*/
238class wxClient : public wxObject
239{
240public:
241 /**
242 Constructs a client object.
243 */
244 wxClient();
245
246 /**
247 Tries to make a connection with a server by host (machine name
248 under UNIX - use 'localhost' for same machine; ignored when using
249 native DDE in Windows), service name and topic string. If the
250 server allows a connection, a wxConnection object will be
251 returned. The type of wxConnection returned can be altered by
7c913512
FM
252 overriding the
253 OnMakeConnection()
23324ae1 254 member to return your own derived connection object.
23324ae1
FM
255 Under Unix, the service name may be either an integer port
256 identifier in which case an Internet domain socket will be used
257 for the communications, or a valid file name (which shouldn't
258 exist and will be deleted afterwards) in which case a Unix domain
259 socket is created.
23324ae1
FM
260 @b SECURITY NOTE: Using Internet domain sockets if extremely
261 insecure for IPC as there is absolutely no access control for
262 them, use Unix domain sockets whenever possible!
263 */
4cc4bfaf
FM
264 wxConnectionBase* MakeConnection(const wxString& host,
265 const wxString& service,
266 const wxString& topic);
23324ae1
FM
267
268 /**
269 Called by MakeConnection(), by
270 default this simply returns a new wxConnection object. Override
271 this method to return a wxConnection descendant customised for the
272 application.
23324ae1
FM
273 The advantage of deriving your own connection class is that it
274 will enable you to intercept messages initiated by the server,
275 such as wxConnection::OnAdvise. You
276 may also want to store application-specific data in instances of
277 the new class.
278 */
4cc4bfaf 279 wxConnectionBase* OnMakeConnection();
23324ae1
FM
280
281 /**
282 Returns @true if this is a valid host name, @false otherwise. This always
283 returns @true under MS Windows.
284 */
285 bool ValidHost(const wxString& host);
286};
287
288
e54c96f1 289
23324ae1
FM
290/**
291 @class wxServer
7c913512 292
23324ae1
FM
293 A wxServer object represents the server part of a client-server
294 DDE-like (Dynamic Data Exchange) conversation. The actual
295 DDE-based implementation using wxDDEServer is available on Windows
296 only, but a platform-independent, socket-based version of this
297 API is available using wxTCPServer, which has the same API.
7c913512 298
23324ae1
FM
299 To create a server which can communicate with a suitable client,
300 you need to derive a class from wxConnection and another from
301 wxServer. The custom wxConnection class will intercept
302 communications in a 'conversation' with a client, and the custom
7c913512 303 wxServer is required so that a user-overridden wxServer::OnAcceptConnection
23324ae1
FM
304 member can return a wxConnection of the required class, when a
305 connection is made. Look at the IPC sample and the @ref overview_ipcoverview
306 "Interprocess communications overview" for
307 an example of how to do this.
7c913512 308
23324ae1
FM
309 @library{wxbase}
310 @category{FIXME}
7c913512 311
e54c96f1 312 @see wxClient, wxConnection, IPC, overview()
23324ae1 313*/
7c913512 314class wxServer
23324ae1
FM
315{
316public:
317 /**
318 Constructs a server object.
319 */
320 wxServer();
321
322 /**
323 Registers the server using the given service name. Under Unix,
324 the service name may be either an integer port identifier in
325 which case an Internet domain socket will be used for the
326 communications, or a valid file name (which shouldn't exist and
327 will be deleted afterwards) in which case a Unix domain socket is
328 created. @false is returned if the call failed (for example, the
329 port number is already in use).
330 */
331 bool Create(const wxString& service);
332
333 /**
334 When a client calls @b MakeConnection, the server receives the
335 message and this member is called. The application should derive a
336 member to intercept this message and return a connection object of
337 either the standard wxConnection type, or (more likely) of a
338 user-derived type.
23324ae1
FM
339 If the topic is @b STDIO, the application may wish to refuse the
340 connection. Under UNIX, when a server is created the
341 OnAcceptConnection message is always sent for standard input and
342 output, but in the context of DDE messages it doesn't make a lot
343 of sense.
344 */
4cc4bfaf 345 virtual wxConnectionBase* OnAcceptConnection(const wxString& topic);
23324ae1 346};
e54c96f1 347