X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ea22bf815ff359791dc23ea48749d22371c09bce..492d6611d43968a82a90a35ffe14c094d1f8d45d:/src/common/sckipc.cpp diff --git a/src/common/sckipc.cpp b/src/common/sckipc.cpp index 587268bda6..03712a890a 100644 --- a/src/common/sckipc.cpp +++ b/src/common/sckipc.cpp @@ -119,13 +119,14 @@ 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) + wxDECLARE_NO_COPY_CLASS(wxTCPEventHandler); }; enum @@ -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) + wxDECLARE_NO_COPY_CLASS(wxTCPEventHandlerModule); +}; + +IMPLEMENT_DYNAMIC_CLASS(wxTCPEventHandlerModule, wxModule) + +wxTCPEventHandler *wxTCPEventHandlerModule::ms_handler = NULL; // -------------------------------------------------------------------------- // wxIPCSocketStreams @@ -152,11 +184,11 @@ public: // ctor initializes all the streams on top of the given socket // // note that we use a bigger than default buffer size which matches the - // typical Ethernet MTU + // typical Ethernet MTU (minus TCP header overhead) wxIPCSocketStreams(wxSocketBase& sock) : m_socketStream(sock), #ifdef USE_BUFFER - m_bufferedOut(m_socketStream, 1500), + m_bufferedOut(m_socketStream, 1448), #else m_bufferedOut(m_socketStream), #endif @@ -250,7 +282,7 @@ private: wxDataInputStream m_dataIn; wxDataOutputStream m_dataOut; - DECLARE_NO_COPY_CLASS(wxIPCSocketStreams) + wxDECLARE_NO_COPY_CLASS(wxIPCSocketStreams); }; namespace @@ -307,7 +339,7 @@ public: private: wxIPCSocketStreams& m_streams; - DECLARE_NO_COPY_CLASS(IPCOutput) + wxDECLARE_NO_COPY_CLASS(IPCOutput); }; } // anonymous namespace @@ -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