]>
git.saurik.com Git - wxWidgets.git/blob - samples/ipc/client.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: DDE sample: client
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // For compilers that support precompilation, includes "wx.h".
21 #include "wx/wxprec.h"
31 // Settings common to both executables: determines whether
32 // we're using TCP/IP or real DDE.
36 #if defined(__WXGTK__) || defined(__WXMOTIF__)
37 #include "mondrian.xpm"
42 // ----------------------------------------------------------------------------
44 // ----------------------------------------------------------------------------
48 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
49 EVT_MENU(CLIENT_QUIT
, MyFrame::OnExit
)
50 EVT_MENU(CLIENT_EXECUTE
, MyFrame::OnExecute
)
51 EVT_MENU(CLIENT_POKE
, MyFrame::OnPoke
)
52 EVT_MENU(CLIENT_REQUEST
, MyFrame::OnRequest
)
55 // ----------------------------------------------------------------------------
57 // ----------------------------------------------------------------------------
59 char ipc_buffer
[4000];
60 wxListBox
*the_list
= NULL
;
62 MyConnection
*the_connection
= NULL
;
65 // ============================================================================
67 // ============================================================================
69 // ----------------------------------------------------------------------------
71 // ----------------------------------------------------------------------------
73 // The `main program' equivalent, creating the windows and returning the
77 wxString server
= "4242";
78 wxString hostName
= wxGetHostName();
85 // Create a new client
86 my_client
= new MyClient
;
87 the_connection
= (MyConnection
*)my_client
->MakeConnection(hostName
, server
, "IPC TEST");
89 while ( !the_connection
)
91 if ( wxMessageBox("Failed to make connection to server.\nRetry?",
93 wxICON_ERROR
| wxYES_NO
| wxCANCEL
) != wxYES
)
99 the_connection
= (MyConnection
*)my_client
->MakeConnection(hostName
, server
, "IPC TEST");
102 if (!the_connection
->StartAdvise("Item"))
103 wxMessageBox("StartAdvise failed", "Client Demo Error");
105 // Create the main frame window
106 (new MyFrame(NULL
, "Client"))->Show(TRUE
);
115 the_connection
->Disconnect();
118 // will delete the connection too
124 // Define my frame constructor
125 MyFrame::MyFrame(wxFrame
*frame
, const wxString
& title
)
126 : wxFrame(frame
, -1, title
)
131 SetIcon(wxICON(mondrian
));
134 wxMenu
*file_menu
= new wxMenu
;
136 file_menu
->Append(CLIENT_EXECUTE
, "Execute");
137 file_menu
->Append(CLIENT_REQUEST
, "Request");
138 file_menu
->Append(CLIENT_POKE
, "Poke");
139 file_menu
->Append(CLIENT_QUIT
, "Quit");
141 wxMenuBar
*menu_bar
= new wxMenuBar
;
143 menu_bar
->Append(file_menu
, "File");
145 // Associate the menu bar with the frame
146 SetMenuBar(menu_bar
);
149 panel
= new wxPanel(this);
150 the_list
= new wxListBox(panel
, CLIENT_LISTBOX
, wxPoint(5, 5));
151 the_list
->Append("Apple");
152 the_list
->Append("Pear");
153 the_list
->Append("Orange");
154 the_list
->Append("Banana");
155 the_list
->Append("Fruit");
161 void MyFrame::OnExecute(wxCommandEvent
& event
)
164 if (!the_connection
->Execute("Hello from the client!"))
165 wxMessageBox("Execute failed", "Client Demo Error");
168 void MyFrame::OnPoke(wxCommandEvent
& event
)
171 if (!the_connection
->Poke("An item", "Some data to poke at the server!"))
172 wxMessageBox("Poke failed", "Client Demo Error");
175 void MyFrame::OnRequest(wxCommandEvent
& event
)
179 char *data
= the_connection
->Request("An item");
181 wxMessageBox(data
, "Client: Request", wxOK
);
183 wxMessageBox("Request failed", "Client Demo Error");
187 void MyFrame::OnExit(wxCommandEvent
& event
)
192 wxConnectionBase
*MyClient::OnMakeConnection()
194 return new MyConnection
;
197 MyConnection::MyConnection()
198 : wxConnection(ipc_buffer
, WXSIZEOF(ipc_buffer
))
202 MyConnection::~MyConnection()
204 the_connection
= NULL
;
207 bool MyConnection::OnAdvise(const wxString
& topic
, const wxString
& item
, char *data
, int size
, wxIPCFormat format
)
211 int n
= the_list
->FindString(data
);
213 the_list
->SetSelection(n
);
218 bool MyConnection::OnDisconnect()
220 wxWindow
*win
= wxTheApp
->GetTopWindow();