1 /////////////////////////////////////////////////////////////////////////////
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
16 #pragma interface "dde.h"
19 #include "wx/ipcbase.h"
22 * Mini-DDE implementation
24 Most transactions involve a topic name and an item name (choose these
25 as befits your application).
29 - ask the server to execute commands (data) associated with a topic
30 - request data from server by topic and item
31 - poke data into the server
32 - ask the server to start an advice loop on topic/item
33 - ask the server to stop an advice loop
37 - respond to execute, request, poke and advice start/stop
38 - send advise data to client
40 Note that this limits the server in the ways it can send data to the
41 client, i.e. it can't send unsolicited information.
45 class WXDLLEXPORT wxDDEServer
;
46 class WXDLLEXPORT wxDDEClient
;
48 class WXDLLEXPORT wxDDEConnection
: public wxConnectionBase
50 DECLARE_DYNAMIC_CLASS(wxDDEConnection
)
52 wxDDEConnection(char *buffer
, int size
);
53 wxDDEConnection(void);
54 ~wxDDEConnection(void);
56 // Calls that CLIENT can make
57 virtual bool Execute(char *data
, int size
= -1, wxIPCFormat format
= wxIPC_TEXT
);
58 virtual bool Execute(const wxString
& str
) { return Execute((char *)(const char *)str
, -1, wxIPC_TEXT
); }
59 virtual char *Request(const wxString
& item
, int *size
= NULL
, wxIPCFormat format
= wxIPC_TEXT
);
60 virtual bool Poke(const wxString
& item
, char *data
, int size
= -1, wxIPCFormat format
= wxIPC_TEXT
);
61 virtual bool StartAdvise(const wxString
& item
);
62 virtual bool StopAdvise(const wxString
& item
);
64 // Calls that SERVER can make
65 virtual bool Advise(const wxString
& item
, char *data
, int size
= -1, wxIPCFormat format
= wxIPC_TEXT
);
67 // Calls that both can make
68 virtual bool Disconnect(void);
70 // Callbacks to SERVER - override at will
71 virtual bool OnExecute(const wxString
& topic
, char *data
, int size
, wxIPCFormat format
) { return FALSE
; };
72 virtual char *OnRequest(const wxString
& topic
, const wxString
& item
, int *size
, wxIPCFormat format
) { return NULL
; };
73 virtual bool OnPoke(const wxString
& topic
, const wxString
& item
, char *data
, int size
, wxIPCFormat format
) { return FALSE
; };
74 virtual bool OnStartAdvise(const wxString
& topic
, const wxString
& item
) { return FALSE
; };
75 virtual bool OnStopAdvise(const wxString
& topic
, const wxString
& item
) { return FALSE
; };
77 // Callbacks to CLIENT - override at will
78 virtual bool OnAdvise(const wxString
& topic
, const wxString
& item
, char *data
, int size
, wxIPCFormat format
) { return FALSE
; };
82 // Default behaviour is to delete connection and return TRUE
83 virtual bool OnDisconnect(void);
89 wxDDEServer
* m_server
;
90 wxDDEClient
* m_client
;
95 wxIPCFormat m_dataType
;
98 class WXDLLEXPORT wxDDEServer
: public wxServerBase
100 DECLARE_DYNAMIC_CLASS(wxDDEServer
)
105 bool Create(const wxString
& server_name
); // Returns FALSE if can't create server (e.g. port
106 // number is already in use)
107 virtual wxConnectionBase
*OnAcceptConnection(const wxString
& topic
);
109 ////////////////////////////////////////////////////////////
112 // Find/delete wxDDEConnection corresponding to the HCONV
113 wxDDEConnection
*FindConnection(WXHCONV conv
);
114 bool DeleteConnection(WXHCONV conv
);
115 inline wxString
& GetServiceName(void) const { return (wxString
&) m_serviceName
; }
116 inline wxList
& GetConnections(void) const { return (wxList
&) m_connections
; }
120 wxString m_serviceName
;
121 wxList m_connections
;
124 class WXDLLEXPORT wxDDEClient
: public wxClientBase
126 DECLARE_DYNAMIC_CLASS(wxDDEClient
)
130 bool ValidHost(const wxString
& host
);
131 virtual wxConnectionBase
*MakeConnection(const wxString
& host
, const wxString
& server
, const wxString
& topic
);
132 // Call this to make a connection.
133 // Returns NULL if cannot.
134 virtual wxConnectionBase
*OnMakeConnection(void); // Tailor this to return own connection.
136 ////////////////////////////////////////////////////////////
139 // Find/delete wxDDEConnection corresponding to the HCONV
140 wxDDEConnection
*FindConnection(WXHCONV conv
);
141 bool DeleteConnection(WXHCONV conv
);
142 inline wxList
& GetConnections(void) const { return (wxList
&) m_connections
; }
146 wxList m_connections
;
149 void WXDLLEXPORT
wxDDEInitialize();
150 void WXDLLEXPORT
wxDDECleanUp();