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