minor optimization: create wxTCPEventHandler only when/if we really need it

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-11-17 11:24:16 +00:00
parent ea22bf815f
commit 01f3d2752a

View File

@@ -119,11 +119,12 @@ GetAddressFromName(const wxString& serverName,
class wxTCPEventHandler : public wxEvtHandler
{
public:
wxTCPEventHandler() : wxEvtHandler() {}
wxTCPEventHandler() : wxEvtHandler() { }
void Client_OnRequest(wxSocketEvent& event);
void Server_OnRequest(wxSocketEvent& event);
private:
DECLARE_EVENT_TABLE()
DECLARE_NO_COPY_CLASS(wxTCPEventHandler)
};
@@ -134,7 +135,38 @@ enum
_SERVER_ONREQUEST_ID
};
static wxTCPEventHandler *gs_handler = NULL;
// --------------------------------------------------------------------------
// wxTCPEventHandlerModule (private class)
// --------------------------------------------------------------------------
class wxTCPEventHandlerModule : public wxModule
{
public:
wxTCPEventHandlerModule() : wxModule() { }
// get the global wxTCPEventHandler creating it if necessary
static wxTCPEventHandler& GetHandler()
{
if ( !ms_handler )
ms_handler = new wxTCPEventHandler;
return *ms_handler;
}
// as ms_handler is initialized on demand, don't do anything in OnInit()
virtual bool OnInit() { return true; }
virtual void OnExit() { wxDELETE(ms_handler); }
private:
static wxTCPEventHandler *ms_handler;
DECLARE_DYNAMIC_CLASS(wxTCPEventHandlerModule)
DECLARE_NO_COPY_CLASS(wxTCPEventHandlerModule)
};
IMPLEMENT_DYNAMIC_CLASS(wxTCPEventHandlerModule, wxModule)
wxTCPEventHandler *wxTCPEventHandlerModule::ms_handler = NULL;
// --------------------------------------------------------------------------
// wxIPCSocketStreams
@@ -370,7 +402,8 @@ wxConnectionBase *wxTCPClient::MakeConnection(const wxString& host,
connection->m_topic = topic;
connection->m_sock = client;
connection->m_streams = streams;
client->SetEventHandler(*gs_handler, _CLIENT_ONREQUEST_ID);
client->SetEventHandler(wxTCPEventHandlerModule::GetHandler(),
_CLIENT_ONREQUEST_ID);
client->SetClientData(connection);
client->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG);
client->Notify(true);
@@ -471,7 +504,8 @@ bool wxTCPServer::Create(const wxString& serverName)
return false;
}
m_server->SetEventHandler(*gs_handler, _SERVER_ONREQUEST_ID);
m_server->SetEventHandler(wxTCPEventHandlerModule::GetHandler(),
_SERVER_ONREQUEST_ID);
m_server->SetClientData(this);
m_server->SetNotify(wxSOCKET_CONNECTION_FLAG);
m_server->Notify(true);
@@ -860,7 +894,8 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event)
new_connection->m_sock = sock;
new_connection->m_streams = streams;
new_connection->m_topic = topic;
sock->SetEventHandler(*gs_handler, _CLIENT_ONREQUEST_ID);
sock->SetEventHandler(wxTCPEventHandlerModule::GetHandler(),
_CLIENT_ONREQUEST_ID);
sock->SetClientData(new_connection);
sock->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG);
sock->Notify(true);
@@ -882,19 +917,4 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event)
sock->Destroy();
}
// --------------------------------------------------------------------------
// wxTCPEventHandlerModule (private class)
// --------------------------------------------------------------------------
class wxTCPEventHandlerModule: public wxModule
{
public:
virtual bool OnInit() { gs_handler = new wxTCPEventHandler; return true; }
virtual void OnExit() { wxDELETE(gs_handler); }
DECLARE_DYNAMIC_CLASS(wxTCPEventHandlerModule)
};
IMPLEMENT_DYNAMIC_CLASS(wxTCPEventHandlerModule, wxModule)
#endif // wxUSE_SOCKETS && wxUSE_IPC && wxUSE_STREAMS