]> git.saurik.com Git - wxWidgets.git/blame - include/wx/sckipc.h
don't leak epoll descriptor
[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
b5dbe15d
VS
52class WXDLLIMPEXP_FWD_NET wxTCPServer;
53class WXDLLIMPEXP_FWD_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
f784a2a9 84 // unhide the Execute overload from wxConnectionBase
86501081
VS
85 // FIXME-UTF8: change Execute() to DoExecute() to avoid having to do this;
86 // don't use c_str() below after removing ANSI build
f784a2a9 87 virtual bool Execute(const wxString& str)
86501081 88 { return Execute(str.c_str(), -1, wxIPC_TEXT); }
f784a2a9 89
07e829dc 90protected:
f6bcfd97
BP
91 wxSocketBase *m_sock;
92 wxSocketStream *m_sockstrm;
93 wxDataInputStream *m_codeci;
07e829dc 94 wxDataOutputStream *m_codeco;
f6bcfd97 95 wxString m_topic;
07e829dc
GRG
96
97 friend class wxTCPServer;
98 friend class wxTCPClient;
cdc59bb6 99 friend class wxTCPEventHandler;
07e829dc 100
f784a2a9 101 DECLARE_NO_COPY_CLASS(wxTCPConnection)
f4ada568
GL
102};
103
968eb2ef 104class WXDLLIMPEXP_NET wxTCPServer: public wxServerBase
f4ada568 105{
f4ada568
GL
106public:
107 wxTCPConnection *topLevelConnection;
108
109 wxTCPServer();
110 virtual ~wxTCPServer();
54da4255 111
d775fa82 112 // Returns false on error (e.g. port number is already in use)
f6bcfd97
BP
113 virtual bool Create(const wxString& serverName);
114
115 // Callbacks to SERVER - override at will
f4ada568 116 virtual wxConnectionBase *OnAcceptConnection(const wxString& topic);
f6bcfd97
BP
117
118protected:
119 wxSocketServer *m_server;
0dbfd66d
VZ
120
121#ifdef __UNIX_LIKE__
122 // the name of the file associated to the Unix domain socket, may be empty
123 wxString m_filename;
124#endif // __UNIX_LIKE__
22f3361e 125
f784a2a9
VZ
126 DECLARE_NO_COPY_CLASS(wxTCPServer)
127 DECLARE_DYNAMIC_CLASS(wxTCPServer)
f4ada568
GL
128};
129
968eb2ef 130class WXDLLIMPEXP_NET wxTCPClient: public wxClientBase
f4ada568 131{
54da4255 132public:
f4ada568
GL
133 wxTCPClient();
134 virtual ~wxTCPClient();
135
136 virtual bool ValidHost(const wxString& host);
f6bcfd97
BP
137
138 // Call this to make a connection. Returns NULL if cannot.
f4ada568
GL
139 virtual wxConnectionBase *MakeConnection(const wxString& host,
140 const wxString& server,
141 const wxString& topic);
54da4255 142
f6bcfd97 143 // Callbacks to CLIENT - override at will
f4ada568 144 virtual wxConnectionBase *OnMakeConnection();
f784a2a9
VZ
145
146private:
147 DECLARE_DYNAMIC_CLASS(wxTCPClient)
f4ada568
GL
148};
149
cdc59bb6 150#endif // wxUSE_SOCKETS && wxUSE_IPC
26dfedc4 151
cdc59bb6 152#endif // _WX_SCKIPC_H