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