1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: dde.h 3 // Purpose: DDE class 4 // Author: Julian Smart 5 // Modified by: 6 // Created: 01/02/97 7 // RCS-ID: $Id: dde.h 53135 2008-04-12 02:31:04Z VZ $ 8 // Copyright: (c) Julian Smart 9 // Licence: wxWindows licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_DDE_H_ 13 #define _WX_DDE_H_ 14 15 #include "wx/ipcbase.h" 16 17 /* 18 * Mini-DDE implementation 19 20 Most transactions involve a topic name and an item name (choose these 21 as befits your application). 22 23 A client can: 24 25 - ask the server to execute commands (data) associated with a topic 26 - request data from server by topic and item 27 - poke data into the server 28 - ask the server to start an advice loop on topic/item 29 - ask the server to stop an advice loop 30 31 A server can: 32 33 - respond to execute, request, poke and advice start/stop 34 - send advise data to client 35 36 Note that this limits the server in the ways it can send data to the 37 client, i.e. it can't send unsolicited information. 38 * 39 */ 40 41 class WXDLLIMPEXP_FWD_BASE wxDDEServer; 42 class WXDLLIMPEXP_FWD_BASE wxDDEClient; 43 44 class WXDLLIMPEXP_BASE wxDDEConnection: public wxConnectionBase 45 { 46 DECLARE_DYNAMIC_CLASS(wxDDEConnection) 47 public: 48 wxDDEConnection(wxChar *buffer, int size); // use external buffer 49 wxDDEConnection(); // use internal buffer 50 virtual ~wxDDEConnection(void); 51 52 // Calls that CLIENT can make 53 virtual bool Execute(const wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT); Execute(const wxString & str)54 virtual bool Execute(const wxString& str) { return Execute(str, -1, wxIPC_TEXT); } 55 virtual wxChar *Request(const wxString& item, int *size = NULL, wxIPCFormat format = wxIPC_TEXT); 56 virtual bool Poke(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT); 57 virtual bool StartAdvise(const wxString& item); 58 virtual bool StopAdvise(const wxString& item); 59 60 // Calls that SERVER can make 61 virtual bool Advise(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT); 62 63 // Calls that both can make 64 virtual bool Disconnect(void); 65 66 // Default behaviour is to delete connection and return true 67 virtual bool OnDisconnect(void); 68 69 public: 70 wxString m_topicName; 71 wxDDEServer* m_server; 72 wxDDEClient* m_client; 73 74 WXHCONV m_hConv; 75 wxChar* m_sendingData; 76 int m_dataSize; 77 wxIPCFormat m_dataType; 78 79 DECLARE_NO_COPY_CLASS(wxDDEConnection) 80 }; 81 82 class WXDLLIMPEXP_BASE wxDDEServer: public wxServerBase 83 { 84 DECLARE_DYNAMIC_CLASS(wxDDEServer) 85 public: 86 87 wxDDEServer(void); 88 virtual ~wxDDEServer(void); 89 bool Create(const wxString& server_name); // Returns false if can't create server (e.g. port 90 // number is already in use) 91 virtual wxConnectionBase *OnAcceptConnection(const wxString& topic); 92 93 //////////////////////////////////////////////////////////// 94 // Implementation 95 96 // Find/delete wxDDEConnection corresponding to the HCONV 97 wxDDEConnection *FindConnection(WXHCONV conv); 98 bool DeleteConnection(WXHCONV conv); GetServiceName(void)99 inline wxString& GetServiceName(void) const { return (wxString&) m_serviceName; } GetConnections(void)100 inline wxDDEConnectionList& GetConnections(void) const 101 { 102 return (wxDDEConnectionList&) m_connections; 103 } 104 105 protected: 106 int m_lastError; 107 wxString m_serviceName; 108 wxDDEConnectionList m_connections; 109 }; 110 111 class WXDLLIMPEXP_BASE wxDDEClient: public wxClientBase 112 { 113 DECLARE_DYNAMIC_CLASS(wxDDEClient) 114 public: 115 wxDDEClient(void); 116 virtual ~wxDDEClient(void); 117 bool ValidHost(const wxString& host); 118 virtual wxConnectionBase *MakeConnection(const wxString& host, const wxString& server, const wxString& topic); 119 // Call this to make a connection. 120 // Returns NULL if cannot. 121 virtual wxConnectionBase *OnMakeConnection(void); // Tailor this to return own connection. 122 123 //////////////////////////////////////////////////////////// 124 // Implementation 125 126 // Find/delete wxDDEConnection corresponding to the HCONV 127 wxDDEConnection *FindConnection(WXHCONV conv); 128 bool DeleteConnection(WXHCONV conv); 129 GetConnections(void)130 inline wxDDEConnectionList& GetConnections(void) const 131 { 132 return (wxDDEConnectionList&) m_connections; 133 } 134 135 protected: 136 int m_lastError; 137 wxDDEConnectionList m_connections; 138 }; 139 140 void WXDLLIMPEXP_BASE wxDDEInitialize(); 141 void WXDLLIMPEXP_BASE wxDDECleanUp(); 142 143 #endif 144 // _WX_DDE_H_ 145