| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: sckipc.h
- // Purpose: interface of wxTCPServer
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- See wxTCPConnection.
- */
- enum wxIPCFormat
- {
- wxIPC_INVALID = 0,
- wxIPC_TEXT = 1, /* CF_TEXT */
- wxIPC_BITMAP = 2, /* CF_BITMAP */
- wxIPC_METAFILE = 3, /* CF_METAFILEPICT */
- wxIPC_SYLK = 4,
- wxIPC_DIF = 5,
- wxIPC_TIFF = 6,
- wxIPC_OEMTEXT = 7, /* CF_OEMTEXT */
- wxIPC_DIB = 8, /* CF_DIB */
- wxIPC_PALETTE = 9,
- wxIPC_PENDATA = 10,
- wxIPC_RIFF = 11,
- wxIPC_WAVE = 12,
- wxIPC_UTF16TEXT = 13, /* CF_UNICODE */
- wxIPC_ENHMETAFILE = 14,
- wxIPC_FILENAME = 15, /* CF_HDROP */
- wxIPC_LOCALE = 16,
- wxIPC_UTF8TEXT = 17,
- wxIPC_UTF32TEXT = 18,
- wxIPC_UNICODETEXT,
- wxIPC_PRIVATE = 20
- };
- /**
- @class wxTCPServer
- A wxTCPServer object represents the server part of a client-server conversation.
- It emulates a DDE-style protocol, but uses TCP/IP which is available on most
- platforms.
- A DDE-based implementation for Windows is available using wxDDEServer.
- @library{wxnet}
- @category{net}
- @see wxTCPClient, wxTCPConnection, @ref overview_ipc
- */
- class wxTCPServer : public wxObject
- {
- public:
- /**
- Constructs a server object.
- */
- wxTCPServer();
- /**
- Registers the server using the given service name.
- Under Unix, the string must contain an integer id which is used as an
- Internet port number. @false is returned if the call failed
- (for example, the port number is already in use).
- */
- virtual bool Create(const wxString& service);
- /**
- When a client calls @b MakeConnection, the server receives the
- message and this member is called.
- The application should derive a member to intercept this message and
- return a connection object of either the standard wxTCPConnection type,
- or of a user-derived type.
- If the topic is "STDIO", the application may wish to refuse the connection.
- Under Unix, when a server is created the OnAcceptConnection message is
- always sent for standard input and output.
- */
- virtual wxConnectionBase* OnAcceptConnection(const wxString& topic);
- };
- /**
- @class wxTCPClient
- A wxTCPClient object represents the client part of a client-server conversation.
- It emulates a DDE-style protocol, but uses TCP/IP which is available on most
- platforms.
- A DDE-based implementation for Windows is available using wxDDEClient.
- To create a client which can communicate with a suitable server, you need
- to derive a class from wxTCPConnection and another from wxTCPClient.
- The custom wxTCPConnection class will intercept communications in
- a 'conversation' with a server, and the custom wxTCPServer is required
- so that a user-overridden wxTCPClient::OnMakeConnection() member can return
- a wxTCPConnection of the required class, when a connection is made.
- @library{wxnet}
- @category{net}
- @see wxTCPServer, wxTCPConnection, @ref overview_ipc
- */
- class wxTCPClient : public wxObject
- {
- public:
- /**
- Constructs a client object.
- */
- wxTCPClient();
- /**
- Tries to make a connection with a server specified by the host
- (a machine name under Unix), service name (must contain an integer
- port number under Unix), and a topic string.
- If the server allows a connection, a wxTCPConnection object will be returned.
- The type of wxTCPConnection returned can be altered by overriding
- the OnMakeConnection() member to return your own derived connection object.
- */
- virtual wxConnectionBase* MakeConnection(const wxString& host,
- const wxString& service,
- const wxString& topic);
- /**
- The type of wxTCPConnection returned from a MakeConnection() call can
- be altered by deriving the @b OnMakeConnection member to return your
- own derived connection object. By default, a wxTCPConnection
- object is returned.
- The advantage of deriving your own connection class is that it will
- enable you to intercept messages initiated by the server, such
- as wxTCPConnection::OnAdvise(). You may also want to store
- application-specific data in instances of the new class.
- */
- virtual wxConnectionBase* OnMakeConnection();
- /**
- Returns @true if this is a valid host name, @false otherwise.
- */
- virtual bool ValidHost(const wxString& host);
- };
- /**
- @class wxTCPConnection
- A wxTCPClient object represents the connection between a client and a server.
- It emulates a DDE-style protocol, but uses TCP/IP which is available on most
- platforms.
- A DDE-based implementation for Windows is available using wxDDEConnection.
- A wxTCPConnection object can be created by making a connection using a
- wxTCPClient object, or by the acceptance of a connection by a wxTCPServer object.
- The bulk of a conversation is controlled by calling members in a
- @b wxTCPConnection object or by overriding its members.
- An application should normally derive a new connection class from
- wxTCPConnection, in order to override the communication event handlers
- to do something interesting.
- @library{wxnet}
- @category{net}
- @see wxTCPClient, wxTCPServer, @ref overview_ipc
- */
- class wxTCPConnection : public wxObject
- {
- public:
- //@{
- /**
- Constructs a connection object.
- If no user-defined connection object is to be derived from wxTCPConnection,
- then the constructor should not be called directly, since the default
- connection object will be provided on requesting (or accepting) a connection.
- However, if the user defines his or her own derived connection object,
- the wxTCPServer::OnAcceptConnection and/or wxTCPClient::OnMakeConnection
- members should be replaced by functions which construct the new connection object.
- If the arguments of the wxTCPConnection constructor are void, then a default
- buffer is associated with the connection. Otherwise, the programmer must
- provide a buffer and size of the buffer for the connection object to use in
- transactions.
- */
- wxTCPConnection();
- wxTCPConnection(void* buffer, size_t size);
- //@}
- //@{
- /**
- Called by the server application to advise the client of a change in
- the data associated with the given item.
- Causes the client connection's OnAdvise() member to be called.
- Returns @true if successful.
- */
- bool Advise(const wxString& item, const void* data, size_t size,
- wxIPCFormat format = wxIPC_PRIVATE);
- bool Advise(const wxString& item, const char* data);
- bool Advise(const wxString& item, const wchar_t* data);
- bool Advise(const wxString& item, const wxString data);
- //@}
- /**
- Called by the client or server application to disconnect from the other
- program; it causes the OnDisconnect() message to be sent to the
- corresponding connection object in the other program.
- The default behaviour of @b OnDisconnect is to delete the
- connection, but the calling application must explicitly delete its
- side of the connection having called @b Disconnect.
- Returns @true if successful.
- */
- virtual bool Disconnect();
- //@{
- /**
- Called by the client application to execute a command on the server.
- Can also be used to transfer arbitrary data to the server (similar
- to Poke() in that respect). Causes the server connection's OnExecute()
- member to be called.
- Returns @true if successful.
- */
- bool Execute(const void* data, size_t size,
- wxIPCFormat format = wxIPC_PRIVATE);
- bool Execute(const char* data);
- bool Execute(const wchar_t* data);
- bool Execute(const wxString data);
- //@}
- /**
- Message sent to the client application when the server notifies it of a
- change in the data associated with the given item.
- */
- virtual bool OnAdvise(const wxString& topic,
- const wxString& item,
- const void* data,
- size_t size,
- wxIPCFormat format);
- /**
- Message sent to the client or server application when the other
- application notifies it to delete the connection.
- Default behaviour is to delete the connection object.
- */
- virtual bool OnDisconnect();
- /**
- Message sent to the server application when the client notifies it to
- execute the given data.
- Note that there is no item associated with this message.
- */
- virtual bool OnExecute(const wxString& topic, const void* data,
- size_t size,
- wxIPCFormat format);
- /**
- Message sent to the server application when the client notifies it to
- accept the given data.
- */
- virtual bool OnPoke(const wxString& topic, const wxString& item,
- const void* data,
- size_t size,
- wxIPCFormat format);
- /**
- Message sent to the server application when the client calls Request().
- The server should respond by returning a character string from @b OnRequest,
- or @NULL to indicate no data.
- */
- virtual const void* OnRequest(const wxString& topic,
- const wxString& item,
- size_t* size,
- wxIPCFormat format);
- /**
- Message sent to the server application by the client, when the client
- wishes to start an 'advise loop' for the given topic and item.
- The server can refuse to participate by returning @false.
- */
- virtual bool OnStartAdvise(const wxString& topic,
- const wxString& item);
- /**
- Message sent to the server application by the client, when the client
- wishes to stop an 'advise loop' for the given topic and item.
- The server can refuse to stop the advise loop by returning @false, although
- this doesn't have much meaning in practice.
- */
- virtual bool OnStopAdvise(const wxString& topic,
- const wxString& item);
- //@{
- /**
- Called by the client application to poke data into the server.
- Can be used to transfer arbitrary data to the server. Causes the server
- connection's OnPoke() member to be called. Returns @true if successful.
- */
- bool Poke(const wxString& item, const void* data, size_t size,
- wxIPCFormat format = wxIPC_PRIVATE);
- bool Poke(const wxString& item, const char* data);
- bool Poke(const wxString& item, const wchar_t* data);
- bool Poke(const wxString& item, const wxString data);
- //@}
- /**
- Called by the client application to request data from the server.
- Causes the server connection's OnRequest() member to be called.
- Returns a character string (actually a pointer to the connection's buffer) if
- successful, @NULL otherwise.
- */
- virtual const void* Request(const wxString& item, size_t* size = 0,
- wxIPCFormat format = wxIPC_TEXT);
- /**
- Called by the client application to ask if an advise loop can be started
- with the server.
- Causes the server connection's OnStartAdvise() member to be called.
- Returns @true if the server okays it, @false otherwise.
- */
- virtual bool StartAdvise(const wxString& item);
- /**
- Called by the client application to ask if an advise loop can be stopped.
- Causes the server connection's OnStopAdvise() member to be called.
- Returns @true if the server okays it, @false otherwise.
- */
- virtual bool StopAdvise(const wxString& item);
- };
|