// Name: server.cpp
// Purpose: Server for wxSocket demo
// Author: Guillermo Rodriguez Garcia <guille@iies.es>
-// Modified by:
// Created: 1999/09/19
-// RCS-ID: $Id$
// Copyright: (c) 1999 Guillermo Rodriguez Garcia
+// (c) 2009 Vadim Zeitlin
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
# include "wx/wx.h"
#endif
+#include "wx/busyinfo.h"
#include "wx/socket.h"
// this example is currently written to use only IP or only IPv6 sockets, it
// --------------------------------------------------------------------------
// the application icon
-#include "mondrian.xpm"
+#ifndef wxHAS_IMAGES_IN_RESOURCES
+ #include "../sample.xpm"
+#endif
// --------------------------------------------------------------------------
// classes
// event handlers (these functions should _not_ be virtual)
void OnUDPTest(wxCommandEvent& event);
+ void OnWaitForAccept(wxCommandEvent& event);
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
void OnServerEvent(wxSocketEvent& event);
{
// menu items
SERVER_UDPTEST = 10,
+ SERVER_WAITFORACCEPT,
SERVER_QUIT = wxID_EXIT,
SERVER_ABOUT = wxID_ABOUT,
EVT_MENU(SERVER_QUIT, MyFrame::OnQuit)
EVT_MENU(SERVER_ABOUT, MyFrame::OnAbout)
EVT_MENU(SERVER_UDPTEST, MyFrame::OnUDPTest)
+ EVT_MENU(SERVER_WAITFORACCEPT, MyFrame::OnWaitForAccept)
EVT_SOCKET(SERVER_ID, MyFrame::OnServerEvent)
EVT_SOCKET(SOCKET_ID, MyFrame::OnSocketEvent)
END_EVENT_TABLE()
// Create the main application window
MyFrame *frame = new MyFrame();
- // Show it and tell the application that it's our main window
+ // Show it
frame->Show(true);
- SetTopWindow(frame);
// Success
return true;
wxDefaultPosition, wxSize(300, 200))
{
// Give the frame an icon
- SetIcon(wxICON(mondrian));
+ SetIcon(wxICON(sample));
// Make menus
m_menuFile = new wxMenu();
+ m_menuFile->Append(SERVER_WAITFORACCEPT, "&Wait for connection\tCtrl-W");
m_menuFile->Append(SERVER_UDPTEST, "&UDP test\tCtrl-U");
m_menuFile->AppendSeparator();
- m_menuFile->Append(SERVER_ABOUT, _("&About...\tCtrl-A"), _("Show about dialog"));
+ m_menuFile->Append(SERVER_ABOUT, _("&About\tCtrl-A"), _("Show about dialog"));
m_menuFile->AppendSeparator();
m_menuFile->Append(SERVER_QUIT, _("E&xit\tAlt-X"), _("Quit server"));
// Create the socket
m_server = new wxSocketServer(addr);
- // We use Ok() here to see if the server is really listening
- if (! m_server->Ok())
+ // We use IsOk() here to see if the server is really listening
+ if (! m_server->IsOk())
{
wxLogMessage("Could not listen at the specified port !");
return;
IPaddress addrReal;
if ( !m_server->GetLocal(addrReal) )
+ {
wxLogMessage("ERROR: couldn't get the address we bound to");
+ }
else
+ {
wxLogMessage("Server listening at %s:%u",
addrReal.IPAddress(), addrReal.Service());
+ }
// Setup the event handler and subscribe to connection events
m_server->SetEventHandler(*this, SERVER_ID);
}
}
+void MyFrame::OnWaitForAccept(wxCommandEvent& WXUNUSED(event))
+{
+ TestLogger logtest("WaitForAccept() test");
+
+ wxBusyInfo("Waiting for connection for 10 seconds...", this);
+ if ( m_server->WaitForAccept(10) )
+ wxLogMessage("Accepted client connection.");
+ else
+ wxLogMessage("Connection error or timeout expired.");
+}
+
void MyFrame::Test1(wxSocketBase *sock)
{
TestLogger logtest("Test 1");
{
IPaddress addr;
if ( !sock->GetPeer(addr) )
+ {
wxLogMessage("New connection from unknown client accepted.");
+ }
else
+ {
wxLogMessage("New client connection from %s:%u accepted",
addr.IPAddress(), addr.Service());
+ }
}
else
{