// global variables
// ----------------------------------------------------------------------------
-char ipc_buffer[4000];
MyConnection *the_connection = NULL;
// ============================================================================
(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];
if (listBox)
{
wxString value = listBox->GetStringSelection();
+
+ /* Because the_connection only holds one connection, in this sample only
+ one connection can receive advise messages */
if (the_connection)
{
- the_connection->Advise("Item", (wxChar *)value.c_str());
+ the_connection->Advise(IPC_ADVISE_NAME, (wxChar *)value.c_str());
}
}
}
Fit();
}
+IPCDialogBox::~IPCDialogBox( )
+{
+ // wxWindows exit code destroys dialog before destroying the connection in
+ // OnExit, so make sure connection won't try to delete the dialog later.
+ if (m_connection)
+ m_connection->dialog = NULL;
+}
+
void IPCDialogBox::OnQuit(wxCommandEvent& event)
{
m_connection->Disconnect();
wxConnectionBase *MyServer::OnAcceptConnection(const wxString& topic)
{
- if (strcmp(topic, "STDIO") != 0 && strcmp(topic, "IPC TEST") == 0)
- return new MyConnection(ipc_buffer, WXSIZEOF(ipc_buffer));
- else
- return NULL;
+ if ( topic == IPC_TOPIC )
+ return new MyConnection();
+
+ // unknown topic
+ return NULL;
}
// ----------------------------------------------------------------------------
// MyConnection
// ----------------------------------------------------------------------------
-MyConnection::MyConnection(char *buf, int size)
- : wxConnection(buf, size)
+MyConnection::MyConnection()
+ : wxConnection()
{
dialog = new IPCDialogBox(wxTheApp->GetTopWindow(), "Connection",
wxPoint(100, 100), wxSize(500, 500), this);
{
if (the_connection)
{
- dialog->Destroy();
+ if (dialog)
+ {
+ dialog->m_connection = NULL;
+ dialog->Destroy();
+ }
the_connection = NULL;
}
}
int WXUNUSED(size),
wxIPCFormat WXUNUSED(format))
{
- wxLogStatus("Execute command: %s", data);
+ wxLogStatus(wxT("Execute command: %s"), data);
return TRUE;
}
int WXUNUSED(size),
wxIPCFormat WXUNUSED(format))
{
- wxLogStatus("Poke command: %s = %s", item.c_str(), data);
+ wxLogStatus(wxT("Poke command: %s = %s"), item.c_str(), data);
return TRUE;
}