X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6097c3a28a968e4acbdbee90072cc3f4ee65ab74..dfe8399aa013a1fa6487d008bf1176078f218c6d:/samples/ipc/client.cpp?ds=sidebyside diff --git a/samples/ipc/client.cpp b/samples/ipc/client.cpp index 8c184d4d0b..f4d1711fe5 100644 --- a/samples/ipc/client.cpp +++ b/samples/ipc/client.cpp @@ -33,7 +33,7 @@ #include "ddesetup.h" -#if defined(__WXGTK__) || defined(__WXMOTIF__) +#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) #include "mondrian.xpm" #endif @@ -60,7 +60,7 @@ char ipc_buffer[4000]; wxListBox *the_list = NULL; MyConnection *the_connection = NULL; -MyClient *my_client ; +MyClient *my_client; // ============================================================================ // implementation @@ -74,32 +74,41 @@ MyClient *my_client ; // main frame bool MyApp::OnInit() { - wxString server = "4242"; - wxString hostName = wxGetHostName(); + // service name (DDE classes) or port number (TCP/IP based classes) + wxString service = IPC_SERVICE; + + // ignored under DDE, host name in TCP/IP based classes + wxString hostName = "localhost"; if (argc > 1) - server = argv[1]; + service = argv[1]; if (argc > 2) hostName = argv[2]; // Create a new client my_client = new MyClient; - the_connection = (MyConnection *)my_client->MakeConnection(hostName, server, "IPC TEST"); - while ( !the_connection ) + // suppress the log messages from MakeConnection() { - if ( wxMessageBox("Failed to make connection to server.\nRetry?", - "Client Demo Error", - wxICON_ERROR | wxYES_NO | wxCANCEL ) != wxYES ) + wxLogNull nolog; + the_connection = (MyConnection *) + my_client->MakeConnection(hostName, service, IPC_TOPIC); + + while ( !the_connection ) { - // no server - return FALSE; + if ( wxMessageBox("Failed to make connection to server.\nRetry?", + "Client Demo Error", + wxICON_ERROR | wxYES_NO | wxCANCEL ) != wxYES ) + { + // no server + return FALSE; + } + + the_connection = (MyConnection *)my_client->MakeConnection(hostName, service, "IPC TEST"); } - - the_connection = (MyConnection *)my_client->MakeConnection(hostName, server, "IPC TEST"); } - if (!the_connection->StartAdvise("Item")) + if (!the_connection->StartAdvise(IPC_ADVISE_NAME)) wxMessageBox("StartAdvise failed", "Client Demo Error"); // Create the main frame window @@ -113,49 +122,49 @@ int MyApp::OnExit() if (the_connection) { the_connection->Disconnect(); + delete the_connection; + the_connection = NULL; } // will delete the connection too + // Update: Seems it didn't delete the_connection, because there's a leak. + // Deletion is now explicitly done a few lines up. delete my_client; + + return 0; } // Define my frame constructor MyFrame::MyFrame(wxFrame *frame, const wxString& title) - : wxFrame(frame, -1, title) + : wxFrame(frame, -1, title, wxDefaultPosition, wxSize(300, 200)) { - panel = NULL; - // Give it an icon SetIcon(wxICON(mondrian)); // Make a menubar wxMenu *file_menu = new wxMenu; - file_menu->Append(CLIENT_EXECUTE, "Execute"); - file_menu->Append(CLIENT_REQUEST, "Request"); - file_menu->Append(CLIENT_POKE, "Poke"); - file_menu->Append(CLIENT_QUIT, "Quit"); + file_menu->Append(CLIENT_EXECUTE, "&Execute\tCtrl-E"); + file_menu->Append(CLIENT_REQUEST, "&Request\tCtrl-R"); + file_menu->Append(CLIENT_POKE, "&Poke\tCtrl-P"); + file_menu->Append(CLIENT_QUIT, "&Quit\tCtrl-Q"); wxMenuBar *menu_bar = new wxMenuBar; - menu_bar->Append(file_menu, "File"); + menu_bar->Append(file_menu, "&File"); // Associate the menu bar with the frame SetMenuBar(menu_bar); - // Make a panel - panel = new wxPanel(this); - the_list = new wxListBox(panel, CLIENT_LISTBOX, wxPoint(5, 5)); + // Make a listbox which shows the choices made in the server + the_list = new wxListBox(this, CLIENT_LISTBOX, wxPoint(5, 5)); the_list->Append("Apple"); the_list->Append("Pear"); the_list->Append("Orange"); the_list->Append("Banana"); the_list->Append("Fruit"); - - panel->Fit(); - Fit(); } void MyFrame::OnExecute(wxCommandEvent& event) @@ -199,11 +208,6 @@ MyConnection::MyConnection() { } -MyConnection::~MyConnection() -{ - the_connection = NULL; -} - bool MyConnection::OnAdvise(const wxString& topic, const wxString& item, char *data, int size, wxIPCFormat format) { if (the_list)