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 class wxTCPEventHandler : public wxEvtHandler
{ {
public: public:
wxTCPEventHandler() : wxEvtHandler() {} wxTCPEventHandler() : wxEvtHandler() { }
void Client_OnRequest(wxSocketEvent& event); void Client_OnRequest(wxSocketEvent& event);
void Server_OnRequest(wxSocketEvent& event); void Server_OnRequest(wxSocketEvent& event);
private:
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
DECLARE_NO_COPY_CLASS(wxTCPEventHandler) DECLARE_NO_COPY_CLASS(wxTCPEventHandler)
}; };
@@ -134,7 +135,38 @@ enum
_SERVER_ONREQUEST_ID _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 // wxIPCSocketStreams
@@ -370,7 +402,8 @@ wxConnectionBase *wxTCPClient::MakeConnection(const wxString& host,
connection->m_topic = topic; connection->m_topic = topic;
connection->m_sock = client; connection->m_sock = client;
connection->m_streams = streams; connection->m_streams = streams;
client->SetEventHandler(*gs_handler, _CLIENT_ONREQUEST_ID); client->SetEventHandler(wxTCPEventHandlerModule::GetHandler(),
_CLIENT_ONREQUEST_ID);
client->SetClientData(connection); client->SetClientData(connection);
client->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG); client->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG);
client->Notify(true); client->Notify(true);
@@ -471,7 +504,8 @@ bool wxTCPServer::Create(const wxString& serverName)
return false; return false;
} }
m_server->SetEventHandler(*gs_handler, _SERVER_ONREQUEST_ID); m_server->SetEventHandler(wxTCPEventHandlerModule::GetHandler(),
_SERVER_ONREQUEST_ID);
m_server->SetClientData(this); m_server->SetClientData(this);
m_server->SetNotify(wxSOCKET_CONNECTION_FLAG); m_server->SetNotify(wxSOCKET_CONNECTION_FLAG);
m_server->Notify(true); m_server->Notify(true);
@@ -860,7 +894,8 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event)
new_connection->m_sock = sock; new_connection->m_sock = sock;
new_connection->m_streams = streams; new_connection->m_streams = streams;
new_connection->m_topic = topic; new_connection->m_topic = topic;
sock->SetEventHandler(*gs_handler, _CLIENT_ONREQUEST_ID); sock->SetEventHandler(wxTCPEventHandlerModule::GetHandler(),
_CLIENT_ONREQUEST_ID);
sock->SetClientData(new_connection); sock->SetClientData(new_connection);
sock->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG); sock->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG);
sock->Notify(true); sock->Notify(true);
@@ -882,19 +917,4 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event)
sock->Destroy(); 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 #endif // wxUSE_SOCKETS && wxUSE_IPC && wxUSE_STREAMS