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:
@@ -864,6 +864,7 @@ imagjpeg.h WXH
|
|||||||
imaglist.h WXH
|
imaglist.h WXH
|
||||||
intl.h WXH Base
|
intl.h WXH Base
|
||||||
ioswrap.h WXH Base
|
ioswrap.h WXH Base
|
||||||
|
ipc.h WXH Base
|
||||||
ipcbase.h WXH Base
|
ipcbase.h WXH Base
|
||||||
isql.h WXH Base
|
isql.h WXH Base
|
||||||
isqlext.h WXH Base
|
isqlext.h WXH Base
|
||||||
|
@@ -20,6 +20,16 @@ for programming popular Internet protocols.
|
|||||||
|
|
||||||
Further information on these classes will be available in due course.
|
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.
|
wxWindows has a high-level protocol based on Windows DDE.
|
||||||
There are two implementations of this DDE-like protocol:
|
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
|
one using real DDE running on Windows only, and another using TCP/IP (sockets) that runs
|
||||||
|
41
include/wx/ipc.h
Normal file
41
include/wx/ipc.h
Normal 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
|
||||||
|
|
@@ -75,7 +75,7 @@ MyClient *my_client;
|
|||||||
bool MyApp::OnInit()
|
bool MyApp::OnInit()
|
||||||
{
|
{
|
||||||
// service name (DDE classes) or port number (TCP/IP based classes)
|
// 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
|
// ignored under DDE, host name in TCP/IP based classes
|
||||||
wxString hostName = "localhost";
|
wxString hostName = "localhost";
|
||||||
@@ -91,7 +91,8 @@ bool MyApp::OnInit()
|
|||||||
// suppress the log messages from MakeConnection()
|
// suppress the log messages from MakeConnection()
|
||||||
{
|
{
|
||||||
wxLogNull nolog;
|
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 )
|
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");
|
wxMessageBox("StartAdvise failed", "Client Demo Error");
|
||||||
|
|
||||||
// Create the main frame window
|
// Create the main frame window
|
||||||
|
@@ -9,34 +9,16 @@
|
|||||||
// Licence: wxWindows licence
|
// Licence: wxWindows licence
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/*
|
// You may set this to 0 to prevent DDE from being used even under Windows
|
||||||
* Adjust this before compiling, to switch between real DDE and TCP/IP
|
//#define wxUSE_DDE_FOR_IPC 0
|
||||||
* implementations.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// If 1, use real DDE. If 0, use TCP/IP
|
#include <wx/ipc.h>
|
||||||
|
|
||||||
#ifdef __WXMSW__
|
// the default service name
|
||||||
#define wxUSE_DDE_FOR_SAMPLE 0
|
#define IPC_SERVICE "4242"
|
||||||
#else
|
|
||||||
#define wxUSE_DDE_FOR_SAMPLE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if wxUSE_DDE_FOR_SAMPLE
|
// the IPC topic
|
||||||
|
#define IPC_TOPIC "IPC TEST"
|
||||||
#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 name of the item we're being advised about
|
||||||
|
#define IPC_ADVISE_NAME "Item"
|
||||||
|
@@ -74,7 +74,7 @@ bool MyApp::OnInit()
|
|||||||
(new MyFrame(NULL, "Server"))->Show(TRUE);
|
(new MyFrame(NULL, "Server"))->Show(TRUE);
|
||||||
|
|
||||||
// service name (DDE classes) or port number (TCP/IP based classes)
|
// service name (DDE classes) or port number (TCP/IP based classes)
|
||||||
wxString service = "4242";
|
wxString service = IPC_SERVICE;
|
||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
service = argv[1];
|
service = argv[1];
|
||||||
@@ -136,7 +136,7 @@ void MyFrame::OnListBoxClick(wxCommandEvent& WXUNUSED(event))
|
|||||||
wxString value = listBox->GetStringSelection();
|
wxString value = listBox->GetStringSelection();
|
||||||
if (the_connection)
|
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)
|
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));
|
return new MyConnection(ipc_buffer, WXSIZEOF(ipc_buffer));
|
||||||
else
|
|
||||||
return NULL;
|
// unknown topic
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user