]>
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 char ipc_buffer
[4000];
61 MyConnection
*the_connection
= NULL
;
63 // ============================================================================
65 // ============================================================================
67 // ----------------------------------------------------------------------------
69 // ----------------------------------------------------------------------------
73 // Create the main frame window
74 (new MyFrame(NULL
, "Server"))->Show(TRUE
);
76 // service name (DDE classes) or port number (TCP/IP based classes)
77 wxString service
= IPC_SERVICE
;
82 // Create a new server
83 m_server
= new MyServer
;
84 m_server
->Create(service
);
96 // ----------------------------------------------------------------------------
98 // ----------------------------------------------------------------------------
100 // Define my frame constructor
101 MyFrame::MyFrame(wxFrame
*frame
, const wxString
& title
)
102 : wxFrame(frame
, -1, title
, wxDefaultPosition
, wxSize(350, 250))
107 SetIcon(wxICON(mondrian
));
110 wxMenu
*file_menu
= new wxMenu
;
112 file_menu
->Append(SERVER_EXIT
, "&Quit\tCtrl-Q");
114 wxMenuBar
*menu_bar
= new wxMenuBar
;
116 menu_bar
->Append(file_menu
, "&File");
118 // Associate the menu bar with the frame
119 SetMenuBar(menu_bar
);
122 wxListBox
*list
= new wxListBox(this, SERVER_LISTBOX
, wxPoint(5, 5));
123 list
->Append("Apple");
124 list
->Append("Pear");
125 list
->Append("Orange");
126 list
->Append("Banana");
127 list
->Append("Fruit");
130 // Set the client process's listbox to this item
131 void MyFrame::OnListBoxClick(wxCommandEvent
& WXUNUSED(event
))
133 wxListBox
* listBox
= (wxListBox
*) FindWindow(SERVER_LISTBOX
);
136 wxString value
= listBox
->GetStringSelection();
139 the_connection
->Advise(IPC_ADVISE_NAME
, (wxChar
*)value
.c_str());
144 void MyFrame::OnExit(wxCommandEvent
& WXUNUSED(event
))
149 // ----------------------------------------------------------------------------
151 // ----------------------------------------------------------------------------
153 IPCDialogBox::IPCDialogBox(wxWindow
*parent
, const wxString
& title
,
154 const wxPoint
& pos
, const wxSize
& size
,
155 MyConnection
*connection
)
156 : wxDialog(parent
, -1, title
, pos
, size
)
158 m_connection
= connection
;
159 (void)new wxButton(this, SERVER_QUIT_BUTTON
, "Quit this connection",
164 void IPCDialogBox::OnQuit(wxCommandEvent
& event
)
166 m_connection
->Disconnect();
170 // ----------------------------------------------------------------------------
172 // ----------------------------------------------------------------------------
174 wxConnectionBase
*MyServer::OnAcceptConnection(const wxString
& topic
)
176 if ( topic
== IPC_TOPIC
)
177 return new MyConnection(ipc_buffer
, WXSIZEOF(ipc_buffer
));
183 // ----------------------------------------------------------------------------
185 // ----------------------------------------------------------------------------
187 MyConnection::MyConnection(char *buf
, int size
)
188 : wxConnection(buf
, size
)
190 dialog
= new IPCDialogBox(wxTheApp
->GetTopWindow(), "Connection",
191 wxPoint(100, 100), wxSize(500, 500), this);
193 the_connection
= this;
196 MyConnection::~MyConnection()
201 the_connection
= NULL
;
205 bool MyConnection::OnExecute(const wxString
& WXUNUSED(topic
),
208 wxIPCFormat
WXUNUSED(format
))
210 wxLogStatus(wxT("Execute command: %s"), data
);
214 bool MyConnection::OnPoke(const wxString
& WXUNUSED(topic
),
215 const wxString
& item
,
218 wxIPCFormat
WXUNUSED(format
))
220 wxLogStatus(wxT("Poke command: %s = %s"), item
.c_str(), data
);
224 char *MyConnection::OnRequest(const wxString
& WXUNUSED(topic
),
225 const wxString
& WXUNUSED(item
),
226 int * WXUNUSED(size
),
227 wxIPCFormat
WXUNUSED(format
))
229 return "Here, have your data, client!";
232 bool MyConnection::OnStartAdvise(const wxString
& WXUNUSED(topic
),
233 const wxString
& WXUNUSED(item
))