]> git.saurik.com Git - wxWidgets.git/blame - include/wx/sckipc.h
don't use -single_module together with -bundle under Darwin (ld gives an error for...
[wxWidgets.git] / include / wx / sckipc.h
CommitLineData
f4ada568
GL
1/////////////////////////////////////////////////////////////////////////////
2// Name: sckipc.h
0834112f
GRG
3// Purpose: Interprocess communication implementation (wxSocket version)
4// Author: Julian Smart
5// Modified by: Guilhem Lavaux (big rewrite) May 1997, 1998
6// Guillermo Rodriguez (updated for wxSocket v2) Jan 2000
cdc59bb6 7// (callbacks deprecated) Mar 2000
f4ada568
GL
8// Created: 1993
9// RCS-ID: $Id$
0834112f
GRG
10// Copyright: (c) Julian Smart 1993
11// (c) Guilhem Lavaux 1997, 1998
12// (c) 2000 Guillermo Rodriguez <guille@iies.es>
65571936 13// Licence: wxWindows licence
f4ada568 14/////////////////////////////////////////////////////////////////////////////
07e829dc 15
f4ada568
GL
16#ifndef _WX_SCKIPC_H
17#define _WX_SCKIPC_H
18
f4ada568 19#include "wx/defs.h"
26dfedc4 20
cdc59bb6 21#if wxUSE_SOCKETS && wxUSE_IPC
26dfedc4 22
f4ada568
GL
23#include "wx/ipcbase.h"
24#include "wx/socket.h"
25#include "wx/sckstrm.h"
26#include "wx/datstrm.h"
27
28/*
29 * Mini-DDE implementation
30
31 Most transactions involve a topic name and an item name (choose these
32 as befits your application).
33
34 A client can:
35
36 - ask the server to execute commands (data) associated with a topic
37 - request data from server by topic and item
38 - poke data into the server
39 - ask the server to start an advice loop on topic/item
40 - ask the server to stop an advice loop
41
42 A server can:
43
44 - respond to execute, request, poke and advice start/stop
45 - send advise data to client
46
47 Note that this limits the server in the ways it can send data to the
48 client, i.e. it can't send unsolicited information.
49 *
50 */
51
7c4728f6
VS
52class WXDLLIMPEXP_NET wxTCPServer;
53class WXDLLIMPEXP_NET wxTCPClient;
07e829dc 54
7c4728f6 55class WXDLLIMPEXP_NET wxTCPConnection: public wxConnectionBase
f4ada568
GL
56{
57 DECLARE_DYNAMIC_CLASS(wxTCPConnection)
f6bcfd97 58
f4ada568 59public:
f010ad48 60 wxTCPConnection(wxChar *buffer, int size);
f4ada568
GL
61 wxTCPConnection();
62 virtual ~wxTCPConnection();
63
64 // Calls that CLIENT can make
0834112f 65 virtual bool Execute(const wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT);
d38e8d5f 66 virtual wxChar *Request(const wxString& item, int *size = NULL, wxIPCFormat format = wxIPC_TEXT);
0834112f
GRG
67 virtual bool Poke(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT);
68 virtual bool StartAdvise(const wxString& item);
69 virtual bool StopAdvise(const wxString& item);
f4ada568
GL
70
71 // Calls that SERVER can make
0834112f 72 virtual bool Advise(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT);
f4ada568
GL
73
74 // Calls that both can make
0834112f 75 virtual bool Disconnect(void);
f4ada568 76
f6bcfd97 77 // Callbacks to BOTH - override at will
d775fa82
WS
78 // Default behaviour is to delete connection and return true
79 virtual bool OnDisconnect(void) { delete this; return true; }
f4ada568 80
f6bcfd97 81 // To enable the compressor (NOTE: not implemented!)
f4ada568 82 void Compress(bool on);
0834112f 83
07e829dc 84protected:
f6bcfd97
BP
85 wxSocketBase *m_sock;
86 wxSocketStream *m_sockstrm;
87 wxDataInputStream *m_codeci;
07e829dc 88 wxDataOutputStream *m_codeco;
f6bcfd97 89 wxString m_topic;
07e829dc
GRG
90
91 friend class wxTCPServer;
92 friend class wxTCPClient;
cdc59bb6 93 friend class wxTCPEventHandler;
07e829dc 94
54da4255 95private:
4ca0f293
DW
96 //
97 // We're hiding an Execute method in ConnectionBase
cdc59bb6 98 //
4ca0f293 99 virtual bool Execute(const wxString& str)
cdc59bb6 100 { return Execute(str, -1, wxIPC_TEXT); }
22f3361e
VZ
101
102 DECLARE_NO_COPY_CLASS(wxTCPConnection)
f4ada568
GL
103};
104
968eb2ef 105class WXDLLIMPEXP_NET wxTCPServer: public wxServerBase
f4ada568
GL
106{
107 DECLARE_DYNAMIC_CLASS(wxTCPServer)
108
109public:
110 wxTCPConnection *topLevelConnection;
111
112 wxTCPServer();
113 virtual ~wxTCPServer();
54da4255 114
d775fa82 115 // Returns false on error (e.g. port number is already in use)
f6bcfd97
BP
116 virtual bool Create(const wxString& serverName);
117
118 // Callbacks to SERVER - override at will
f4ada568 119 virtual wxConnectionBase *OnAcceptConnection(const wxString& topic);
f6bcfd97
BP
120
121protected:
122 wxSocketServer *m_server;
0dbfd66d
VZ
123
124#ifdef __UNIX_LIKE__
125 // the name of the file associated to the Unix domain socket, may be empty
126 wxString m_filename;
127#endif // __UNIX_LIKE__
22f3361e
VZ
128
129 DECLARE_NO_COPY_CLASS(wxTCPServer)
f4ada568
GL
130};
131
968eb2ef 132class WXDLLIMPEXP_NET wxTCPClient: public wxClientBase
f4ada568
GL
133{
134 DECLARE_DYNAMIC_CLASS(wxTCPClient)
135
54da4255 136public:
f4ada568
GL
137 wxTCPClient();
138 virtual ~wxTCPClient();
139
140 virtual bool ValidHost(const wxString& host);
f6bcfd97
BP
141
142 // Call this to make a connection. Returns NULL if cannot.
f4ada568
GL
143 virtual wxConnectionBase *MakeConnection(const wxString& host,
144 const wxString& server,
145 const wxString& topic);
54da4255 146
f6bcfd97 147 // Callbacks to CLIENT - override at will
f4ada568
GL
148 virtual wxConnectionBase *OnMakeConnection();
149};
150
cdc59bb6 151#endif // wxUSE_SOCKETS && wxUSE_IPC
26dfedc4 152
cdc59bb6 153#endif // _WX_SCKIPC_H