]>
git.saurik.com Git - wxWidgets.git/blob - samples/ipc/server.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: IPC sample: server
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.
35 #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
36 #include "mondrian.xpm"
41 // ----------------------------------------------------------------------------
43 // ----------------------------------------------------------------------------
47 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
48 EVT_MENU (SERVER_EXIT
, MyFrame::OnExit
)
49 EVT_LISTBOX(SERVER_LISTBOX
, MyFrame::OnListBoxClick
)
52 BEGIN_EVENT_TABLE(IPCDialogBox
, wxDialog
)
53 EVT_BUTTON(SERVER_QUIT_BUTTON
, IPCDialogBox::OnQuit
)
56 // ----------------------------------------------------------------------------
58 // ----------------------------------------------------------------------------
60 MyConnection
*the_connection
= NULL
;
62 // ============================================================================
64 // ============================================================================
66 // ----------------------------------------------------------------------------
68 // ----------------------------------------------------------------------------
72 // Create the main frame window
73 (new MyFrame(NULL
, "Server"))->Show(TRUE
);
75 // service name (DDE classes) or port number (TCP/IP based classes)
76 wxString service
= IPC_SERVICE
;
81 // Create a new server
82 m_server
= new MyServer
;
83 m_server
->Create(service
);
95 // ----------------------------------------------------------------------------
97 // ----------------------------------------------------------------------------
99 // Define my frame constructor
100 MyFrame::MyFrame(wxFrame
*frame
, const wxString
& title
)
101 : wxFrame(frame
, -1, title
, wxDefaultPosition
, wxSize(350, 250))
106 SetIcon(wxICON(mondrian
));
109 wxMenu
*file_menu
= new wxMenu
;
111 file_menu
->Append(SERVER_EXIT
, "&Quit\tCtrl-Q");
113 wxMenuBar
*menu_bar
= new wxMenuBar
;
115 menu_bar
->Append(file_menu
, "&File");
117 // Associate the menu bar with the frame
118 SetMenuBar(menu_bar
);
121 wxListBox
*list
= new wxListBox(this, SERVER_LISTBOX
, wxPoint(5, 5));
122 list
->Append("Apple");
123 list
->Append("Pear");
124 list
->Append("Orange");
125 list
->Append("Banana");
126 list
->Append("Fruit");
129 // Set the client process's listbox to this item
130 void MyFrame::OnListBoxClick(wxCommandEvent
& WXUNUSED(event
))
132 wxListBox
* listBox
= (wxListBox
*) FindWindow(SERVER_LISTBOX
);
135 wxString value
= listBox
->GetStringSelection();
137 /* Because the_connection only holds one connection, in this sample only
138 one connection can receive advise messages */
141 the_connection
->Advise(IPC_ADVISE_NAME
, (wxChar
*)value
.c_str());
146 void MyFrame::OnExit(wxCommandEvent
& WXUNUSED(event
))
151 // ----------------------------------------------------------------------------
153 // ----------------------------------------------------------------------------
155 IPCDialogBox::IPCDialogBox(wxWindow
*parent
, const wxString
& title
,
156 const wxPoint
& pos
, const wxSize
& size
,
157 MyConnection
*connection
)
158 : wxDialog(parent
, -1, title
, pos
, size
)
160 m_connection
= connection
;
161 (void)new wxButton(this, SERVER_QUIT_BUTTON
, "Quit this connection",
166 IPCDialogBox::~IPCDialogBox( )
168 // wxWindows exit code destroys dialog before destroying the connection in
169 // OnExit, so make sure connection won't try to delete the dialog later.
171 m_connection
->dialog
= NULL
;
174 void IPCDialogBox::OnQuit(wxCommandEvent
& event
)
176 m_connection
->Disconnect();
180 // ----------------------------------------------------------------------------
182 // ----------------------------------------------------------------------------
184 wxConnectionBase
*MyServer::OnAcceptConnection(const wxString
& topic
)
186 if ( topic
== IPC_TOPIC
)
187 return new MyConnection();
193 // ----------------------------------------------------------------------------
195 // ----------------------------------------------------------------------------
197 MyConnection::MyConnection()
200 dialog
= new IPCDialogBox(wxTheApp
->GetTopWindow(), "Connection",
201 wxPoint(100, 100), wxSize(500, 500), this);
203 the_connection
= this;
206 MyConnection::~MyConnection()
212 dialog
->m_connection
= NULL
;
215 the_connection
= NULL
;
219 bool MyConnection::OnExecute(const wxString
& WXUNUSED(topic
),
222 wxIPCFormat
WXUNUSED(format
))
224 wxLogStatus(wxT("Execute command: %s"), data
);
228 bool MyConnection::OnPoke(const wxString
& WXUNUSED(topic
),
229 const wxString
& item
,
232 wxIPCFormat
WXUNUSED(format
))
234 wxLogStatus(wxT("Poke command: %s = %s"), item
.c_str(), data
);
238 char *MyConnection::OnRequest(const wxString
& WXUNUSED(topic
),
239 const wxString
& WXUNUSED(item
),
240 int * WXUNUSED(size
),
241 wxIPCFormat
WXUNUSED(format
))
243 return "Here, have your data, client!";
246 bool MyConnection::OnStartAdvise(const wxString
& WXUNUSED(topic
),
247 const wxString
& WXUNUSED(item
))