added wx/ipc.h and used/documented it

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15144 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2002-04-15 18:24:46 +00:00
parent 717e51d850
commit d5172a588c
6 changed files with 71 additions and 35 deletions

View File

@ -864,6 +864,7 @@ imagjpeg.h WXH
imaglist.h WXH
intl.h WXH Base
ioswrap.h WXH Base
ipc.h WXH Base
ipcbase.h WXH Base
isql.h WXH Base
isqlext.h WXH Base

View File

@ -20,6 +20,16 @@ for programming popular Internet protocols.
Further information on these classes will be available in due course.
Notice that by including {\tt <wx/ipc.h>} you may define convnient synonyms for
the IPC classes: {\tt wxServer} for either {\tt wxDDEServer} or
{\tt wxTCPServer} depending on whether DDE-based or socket-based implementation
is used and the same thing for {\tt wxClient} and {\tt wxConnection}. By
default, DDE implementation is used under Windows. If you want to use IPC
between the different workstations you should define {\tt wxUSE\_DDE\_FOR\_IPC}
as $0$ before including this header -- this will force using TCP/IP
implementation even under Windows.
wxWindows has a high-level protocol based on Windows DDE.
There are two implementations of this DDE-like protocol:
one using real DDE running on Windows only, and another using TCP/IP (sockets) that runs

41
include/wx/ipc.h Normal file
View File

@ -0,0 +1,41 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/ipc.h
// Purpose: wrapper around different wxIPC classes implementations
// Author: Vadim Zeitlin
// Modified by:
// Created: 15.04.02
// RCS-ID: $Id$
// Copyright: (c) 2002 Vadim Zeitlin
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// Set wxUSE_DDE_FOR_IPC to 1 to use DDE for IPC under Windows. If it is set to
// 0, or if the platform is not Windows, use TCP/IP for IPC implementation
#if !defined(wxUSE_DDE_FOR_IPC)
#ifdef __WXMSW__
#define wxUSE_DDE_FOR_IPC 1
#else
#define wxUSE_DDE_FOR_IPC 0
#endif
#endif // !defined(wxUSE_DDE_FOR_IPC)
#if !defined(__WINDOWS__)
#undef wxUSE_DDE_FOR_IPC
#define wxUSE_DDE_FOR_IPC 0
#endif
#if wxUSE_DDE_FOR_IPC
#define wxConnection wxDDEConnection
#define wxServer wxDDEServer
#define wxClient wxDDEClient
#include "wx/dde.h"
#else // !wxUSE_DDE_FOR_IPC
#define wxConnection wxTCPConnection
#define wxServer wxTCPServer
#define wxClient wxTCPClient
#include "wx/sckipc.h"
#endif // wxUSE_DDE_FOR_IPC/!wxUSE_DDE_FOR_IPC

View File

@ -75,7 +75,7 @@ MyClient *my_client;
bool MyApp::OnInit()
{
// service name (DDE classes) or port number (TCP/IP based classes)
wxString service = "4242";
wxString service = IPC_SERVICE;
// ignored under DDE, host name in TCP/IP based classes
wxString hostName = "localhost";
@ -91,7 +91,8 @@ bool MyApp::OnInit()
// suppress the log messages from MakeConnection()
{
wxLogNull nolog;
the_connection = (MyConnection *)my_client->MakeConnection(hostName, service, "IPC TEST");
the_connection = (MyConnection *)
my_client->MakeConnection(hostName, service, IPC_TOPIC);
while ( !the_connection )
{
@ -107,7 +108,7 @@ bool MyApp::OnInit()
}
}
if (!the_connection->StartAdvise("Item"))
if (!the_connection->StartAdvise(IPC_ADVISE_NAME))
wxMessageBox("StartAdvise failed", "Client Demo Error");
// Create the main frame window

View File

@ -9,34 +9,16 @@
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
/*
* Adjust this before compiling, to switch between real DDE and TCP/IP
* implementations.
*/
// You may set this to 0 to prevent DDE from being used even under Windows
//#define wxUSE_DDE_FOR_IPC 0
// If 1, use real DDE. If 0, use TCP/IP
#include <wx/ipc.h>
#ifdef __WXMSW__
#define wxUSE_DDE_FOR_SAMPLE 0
#else
#define wxUSE_DDE_FOR_SAMPLE 0
#endif
// the default service name
#define IPC_SERVICE "4242"
#if wxUSE_DDE_FOR_SAMPLE
#define wxConnection wxDDEConnection
#define wxServer wxDDEServer
#define wxClient wxDDEClient
#include <wx/dde.h>
#else
#define wxConnection wxTCPConnection
#define wxServer wxTCPServer
#define wxClient wxTCPClient
#include <wx/sckipc.h>
#endif
// the IPC topic
#define IPC_TOPIC "IPC TEST"
// the name of the item we're being advised about
#define IPC_ADVISE_NAME "Item"

View File

@ -74,7 +74,7 @@ bool MyApp::OnInit()
(new MyFrame(NULL, "Server"))->Show(TRUE);
// service name (DDE classes) or port number (TCP/IP based classes)
wxString service = "4242";
wxString service = IPC_SERVICE;
if (argc > 1)
service = argv[1];
@ -136,7 +136,7 @@ void MyFrame::OnListBoxClick(wxCommandEvent& WXUNUSED(event))
wxString value = listBox->GetStringSelection();
if (the_connection)
{
the_connection->Advise("Item", (wxChar *)value.c_str());
the_connection->Advise(IPC_ADVISE_NAME, (wxChar *)value.c_str());
}
}
}
@ -173,10 +173,11 @@ void IPCDialogBox::OnQuit(wxCommandEvent& event)
wxConnectionBase *MyServer::OnAcceptConnection(const wxString& topic)
{
if (strcmp(topic, "STDIO") != 0 && strcmp(topic, "IPC TEST") == 0)
if ( topic == IPC_TOPIC )
return new MyConnection(ipc_buffer, WXSIZEOF(ipc_buffer));
else
return NULL;
// unknown topic
return NULL;
}
// ----------------------------------------------------------------------------