X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4fce73fcaf45a87f5f81a7495bea05d1b8b5358e..92956ab232b5154998cb82e9f1df83307e3c05b6:/samples/ipc/server.cpp diff --git a/samples/ipc/server.cpp b/samples/ipc/server.cpp index 0c91c8df45..562f9bb9f2 100644 --- a/samples/ipc/server.cpp +++ b/samples/ipc/server.cpp @@ -57,7 +57,6 @@ END_EVENT_TABLE() // global variables // ---------------------------------------------------------------------------- -char ipc_buffer[4000]; MyConnection *the_connection = NULL; // ============================================================================ @@ -71,7 +70,7 @@ MyConnection *the_connection = NULL; bool MyApp::OnInit() { // Create the main frame window - (new MyFrame(NULL, "Server"))->Show(TRUE); + (new MyFrame(NULL, _T("Server")))->Show(true); // service name (DDE classes) or port number (TCP/IP based classes) wxString service = IPC_SERVICE; @@ -83,7 +82,7 @@ bool MyApp::OnInit() m_server = new MyServer; m_server->Create(service); - return TRUE; + return true; } int MyApp::OnExit() @@ -99,9 +98,11 @@ int MyApp::OnExit() // Define my frame constructor MyFrame::MyFrame(wxFrame *frame, const wxString& title) - : wxFrame(frame, -1, title, wxDefaultPosition, wxSize(350, 250)) + : wxFrame(frame, wxID_ANY, title, wxDefaultPosition, wxSize(350, 250)) { +#if wxUSE_STATUSBAR CreateStatusBar(); +#endif // wxUSE_STATUSBAR // Give it an icon SetIcon(wxICON(mondrian)); @@ -109,22 +110,22 @@ MyFrame::MyFrame(wxFrame *frame, const wxString& title) // Make a menubar wxMenu *file_menu = new wxMenu; - file_menu->Append(SERVER_EXIT, "&Quit\tCtrl-Q"); + file_menu->Append(SERVER_EXIT, _T("&Quit\tCtrl-Q")); wxMenuBar *menu_bar = new wxMenuBar; - menu_bar->Append(file_menu, "&File"); + menu_bar->Append(file_menu, _T("&File")); // Associate the menu bar with the frame SetMenuBar(menu_bar); // Make a listbox - wxListBox *list = new wxListBox(this, SERVER_LISTBOX, wxPoint(5, 5)); - list->Append("Apple"); - list->Append("Pear"); - list->Append("Orange"); - list->Append("Banana"); - list->Append("Fruit"); + wxListBox *list = new wxListBox(this, SERVER_LISTBOX); + list->Append(_T("Apple")); + list->Append(_T("Pear")); + list->Append(_T("Orange")); + list->Append(_T("Banana")); + list->Append(_T("Fruit")); } // Set the client process's listbox to this item @@ -134,16 +135,19 @@ void MyFrame::OnListBoxClick(wxCommandEvent& WXUNUSED(event)) 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(IPC_ADVISE_NAME, (wxChar *)value.c_str()); + the_connection->Advise(IPC_ADVISE_NAME, (wxChar*)value.c_str()); } } } void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event)) { - Close(TRUE); + Close(true); } // ---------------------------------------------------------------------------- @@ -153,15 +157,23 @@ void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event)) IPCDialogBox::IPCDialogBox(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size, MyConnection *connection) - : wxDialog(parent, -1, title, pos, size) + : wxDialog(parent, wxID_ANY, title, pos, size) { m_connection = connection; - (void)new wxButton(this, SERVER_QUIT_BUTTON, "Quit this connection", + (void)new wxButton(this, SERVER_QUIT_BUTTON, _T("Quit this connection"), wxPoint(5, 5)); Fit(); } -void IPCDialogBox::OnQuit(wxCommandEvent& event) +IPCDialogBox::~IPCDialogBox( ) +{ + // wxWidgets 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& WXUNUSED(event)) { m_connection->Disconnect(); delete m_connection; @@ -174,7 +186,7 @@ void IPCDialogBox::OnQuit(wxCommandEvent& event) wxConnectionBase *MyServer::OnAcceptConnection(const wxString& topic) { if ( topic == IPC_TOPIC ) - return new MyConnection(ipc_buffer, WXSIZEOF(ipc_buffer)); + return new MyConnection(); // unknown topic return NULL; @@ -184,12 +196,12 @@ wxConnectionBase *MyServer::OnAcceptConnection(const wxString& topic) // 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); - dialog->Show(TRUE); + dialog = new IPCDialogBox(wxTheApp->GetTopWindow(), _T("Connection"), + wxDefaultPosition, wxDefaultSize, this); + dialog->Show(true); the_connection = this; } @@ -197,41 +209,45 @@ MyConnection::~MyConnection() { if (the_connection) { - dialog->Destroy(); + if (dialog) + { + dialog->m_connection = NULL; + dialog->Destroy(); + } the_connection = NULL; } } bool MyConnection::OnExecute(const wxString& WXUNUSED(topic), - char *data, + wxChar *data, int WXUNUSED(size), wxIPCFormat WXUNUSED(format)) { wxLogStatus(wxT("Execute command: %s"), data); - return TRUE; + return true; } bool MyConnection::OnPoke(const wxString& WXUNUSED(topic), const wxString& item, - char *data, + wxChar *data, int WXUNUSED(size), wxIPCFormat WXUNUSED(format)) { wxLogStatus(wxT("Poke command: %s = %s"), item.c_str(), data); - return TRUE; + return true; } -char *MyConnection::OnRequest(const wxString& WXUNUSED(topic), +wxChar *MyConnection::OnRequest(const wxString& WXUNUSED(topic), const wxString& WXUNUSED(item), int * WXUNUSED(size), wxIPCFormat WXUNUSED(format)) { - return "Here, have your data, client!"; + return _T("Here, have your data, client!"); } bool MyConnection::OnStartAdvise(const wxString& WXUNUSED(topic), const wxString& WXUNUSED(item)) { - return TRUE; + return true; }