Added GSocket for Unix (only GTK for the moment)
[wxWidgets.git] / include / wx / sckipc.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: sckipc.h
3 // Purpose: Interprocess communication
4 // Author: Julian Smart/Guilhem Lavaux (big rewrite)
5 // Modified by: Guilhem Lavaux 1997
6 // Created: 1993
7 // RCS-ID: $Id$
8 // Copyright: (c) 1993 Julian Smart
9 // (c) 1997, 1998 Guilhem Lavaux
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_SCKIPC_H
13 #define _WX_SCKIPC_H
14
15 #ifdef __GNUG__
16 #pragma interface
17 #endif
18
19 #include "wx/defs.h"
20 #include "wx/setup.h"
21 #include "wx/ipcbase.h"
22 #include "wx/socket.h"
23 #include "wx/sckstrm.h"
24 #include "wx/datstrm.h"
25
26 /*
27 * Mini-DDE implementation
28
29 Most transactions involve a topic name and an item name (choose these
30 as befits your application).
31
32 A client can:
33
34 - ask the server to execute commands (data) associated with a topic
35 - request data from server by topic and item
36 - poke data into the server
37 - ask the server to start an advice loop on topic/item
38 - ask the server to stop an advice loop
39
40 A server can:
41
42 - respond to execute, request, poke and advice start/stop
43 - send advise data to client
44
45 Note that this limits the server in the ways it can send data to the
46 client, i.e. it can't send unsolicited information.
47 *
48 */
49
50 class wxTCPServer;
51 class wxTCPClient;
52 class wxTCPConnection: public wxConnectionBase
53 {
54 DECLARE_DYNAMIC_CLASS(wxTCPConnection)
55
56 protected:
57 wxSocketBase *m_sock;
58 wxSocketStream *m_sockstrm;
59 wxDataInputStream *m_codeci;
60 wxDataOutputStream *m_codeco;
61 wxString m_topic;
62
63 friend class wxTCPServer;
64 friend class wxTCPClient;
65 friend void Client_OnRequest(wxSocketBase&,
66 GSocketEvent, char *);
67 friend void Server_OnRequest(wxSocketServer&,
68 GSocketEvent, char *);
69 public:
70
71 wxTCPConnection(char *buffer, int size);
72 wxTCPConnection();
73 virtual ~wxTCPConnection();
74
75 // Calls that CLIENT can make
76 bool Execute(wxChar *data, int size = -1,
77 wxIPCFormat format = wxIPC_TEXT);
78 char *Request(const wxString& item, int *size = NULL,
79 wxIPCFormat format = wxIPC_TEXT);
80 bool Poke(const wxString& item, wxChar *data, int size = -1,
81 wxIPCFormat format = wxIPC_TEXT);
82 bool StartAdvise(const wxString& item);
83 bool StopAdvise(const wxString& item);
84
85 // Calls that SERVER can make
86 bool Advise(const wxString& item, wxChar *data, int size = -1,
87 wxIPCFormat format = wxIPC_TEXT);
88
89 // Calls that both can make
90 bool Disconnect();
91
92 // Called when we lost the peer.
93 bool OnDisconnect() { return TRUE; }
94
95 // To enable the compressor
96 void Compress(bool on);
97 };
98
99 class wxTCPServer: public wxServerBase
100 {
101 DECLARE_DYNAMIC_CLASS(wxTCPServer)
102
103 public:
104 wxTCPConnection *topLevelConnection;
105
106 wxTCPServer();
107 virtual ~wxTCPServer();
108
109 // Returns FALSE if can't create server (e.g. port number is already in use)
110 virtual bool Create(const wxString& server_name);
111 virtual wxConnectionBase *OnAcceptConnection(const wxString& topic);
112 };
113
114 class wxTCPClient: public wxClientBase
115 {
116 DECLARE_DYNAMIC_CLASS(wxTCPClient)
117
118 public:
119 wxTCPClient();
120 virtual ~wxTCPClient();
121
122 virtual bool ValidHost(const wxString& host);
123 // Call this to make a connection.
124 // Returns NULL if cannot.
125 virtual wxConnectionBase *MakeConnection(const wxString& host,
126 const wxString& server,
127 const wxString& topic);
128
129 // Tailor this to return own connection.
130 virtual wxConnectionBase *OnMakeConnection();
131 };
132
133 #endif // ipcsock.h