move enabled callbacks flag down to wxSocketImplUnix from wxSocketImplFDIO, this allows to get rid of the letter
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56999 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -27,6 +27,7 @@ public:
|
|||||||
m_fds[1] = -1;
|
m_fds[1] = -1;
|
||||||
|
|
||||||
m_use_events = false;
|
m_use_events = false;
|
||||||
|
m_enabledCallbacks = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Shutdown();
|
virtual void Shutdown();
|
||||||
@@ -42,6 +43,14 @@ public:
|
|||||||
virtual void OnWriteWaiting();
|
virtual void OnWriteWaiting();
|
||||||
virtual void OnExceptionWaiting();
|
virtual void OnExceptionWaiting();
|
||||||
|
|
||||||
|
// Unix-specific functions
|
||||||
|
bool HasAnyEnabledCallbacks() const { return m_enabledCallbacks != 0; }
|
||||||
|
void EnableCallback(wxFDIODispatcherEntryFlags flag)
|
||||||
|
{ m_enabledCallbacks |= flag; }
|
||||||
|
void DisableCallback(wxFDIODispatcherEntryFlags flag)
|
||||||
|
{ m_enabledCallbacks &= ~flag; }
|
||||||
|
int GetEnabledCallbacks() const { return m_enabledCallbacks; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual wxSocketError DoHandleConnect(int ret);
|
virtual wxSocketError DoHandleConnect(int ret);
|
||||||
virtual void DoClose()
|
virtual void DoClose()
|
||||||
@@ -99,6 +108,7 @@ private:
|
|||||||
int Send_Stream(const char *buffer, int size);
|
int Send_Stream(const char *buffer, int size);
|
||||||
int Send_Dgram(const char *buffer, int size);
|
int Send_Dgram(const char *buffer, int size);
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// true if socket should fire events
|
// true if socket should fire events
|
||||||
bool m_use_events;
|
bool m_use_events;
|
||||||
@@ -107,6 +117,13 @@ protected:
|
|||||||
// with the socket
|
// with the socket
|
||||||
int m_fds[2];
|
int m_fds[2];
|
||||||
|
|
||||||
|
// the events which are currently enabled for this socket, combination of
|
||||||
|
// wxFDIO_INPUT and wxFDIO_OUTPUT values
|
||||||
|
//
|
||||||
|
// TODO: this overlaps with m_detected but the semantics of the latter are
|
||||||
|
// very unclear so I don't dare to remove it right now
|
||||||
|
int m_enabledCallbacks;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// notify the associated wxSocket about a change in socket state and shut
|
// notify the associated wxSocket about a change in socket state and shut
|
||||||
// down the socket if the event is wxSOCKET_LOST
|
// down the socket if the event is wxSOCKET_LOST
|
||||||
|
@@ -29,26 +29,6 @@
|
|||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// wxSocketImplFDIO
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class wxSocketImplFDIO : public wxSocketImplUnix
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
wxSocketImplFDIO(wxSocketBase& wxsocket)
|
|
||||||
: wxSocketImplUnix(wxsocket)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetFlags() const { return m_flags; }
|
|
||||||
void RemoveFlag(wxFDIODispatcherEntryFlags flag) { m_flags &= ~flag; }
|
|
||||||
void AddFlag(wxFDIODispatcherEntryFlags flag) { m_flags |= flag; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
int m_flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxSocketSelectManager
|
// wxSocketSelectManager
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -56,11 +36,6 @@ private:
|
|||||||
class wxSocketSelectManager : public wxSocketFDBasedManager
|
class wxSocketSelectManager : public wxSocketFDBasedManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual wxSocketImpl *CreateSocket(wxSocketBase& wxsocket)
|
|
||||||
{
|
|
||||||
return new wxSocketImplFDIO(wxsocket);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void Install_Callback(wxSocketImpl *socket, wxSocketNotify event);
|
virtual void Install_Callback(wxSocketImpl *socket, wxSocketNotify event);
|
||||||
virtual void Uninstall_Callback(wxSocketImpl *socket, wxSocketNotify event);
|
virtual void Uninstall_Callback(wxSocketImpl *socket, wxSocketNotify event);
|
||||||
};
|
};
|
||||||
@@ -68,7 +43,7 @@ public:
|
|||||||
void wxSocketSelectManager::Install_Callback(wxSocketImpl *socket_,
|
void wxSocketSelectManager::Install_Callback(wxSocketImpl *socket_,
|
||||||
wxSocketNotify event)
|
wxSocketNotify event)
|
||||||
{
|
{
|
||||||
wxSocketImplFDIO * const socket = static_cast<wxSocketImplFDIO *>(socket_);
|
wxSocketImplUnix * const socket = static_cast<wxSocketImplUnix *>(socket_);
|
||||||
|
|
||||||
const int fd = socket->m_fd;
|
const int fd = socket->m_fd;
|
||||||
|
|
||||||
@@ -85,20 +60,20 @@ void wxSocketSelectManager::Install_Callback(wxSocketImpl *socket_,
|
|||||||
|
|
||||||
// register it when it's used for the first time, update it if it had been
|
// register it when it's used for the first time, update it if it had been
|
||||||
// previously registered
|
// previously registered
|
||||||
const bool registerHandler = socket->GetFlags() == 0;
|
const bool alreadyRegistered = socket->HasAnyEnabledCallbacks();
|
||||||
|
|
||||||
socket->AddFlag(d == FD_INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT);
|
socket->EnableCallback(d == FD_INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT);
|
||||||
|
|
||||||
if ( registerHandler )
|
if ( alreadyRegistered )
|
||||||
dispatcher->RegisterFD(fd, socket, socket->GetFlags());
|
dispatcher->ModifyFD(fd, socket, socket->GetEnabledCallbacks());
|
||||||
else
|
else
|
||||||
dispatcher->ModifyFD(fd, socket, socket->GetFlags());
|
dispatcher->RegisterFD(fd, socket, socket->GetEnabledCallbacks());
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSocketSelectManager::Uninstall_Callback(wxSocketImpl *socket_,
|
void wxSocketSelectManager::Uninstall_Callback(wxSocketImpl *socket_,
|
||||||
wxSocketNotify event)
|
wxSocketNotify event)
|
||||||
{
|
{
|
||||||
wxSocketImplFDIO * const socket = static_cast<wxSocketImplFDIO *>(socket_);
|
wxSocketImplUnix * const socket = static_cast<wxSocketImplUnix *>(socket_);
|
||||||
|
|
||||||
const SocketDir d = GetDirForEvent(socket, event);
|
const SocketDir d = GetDirForEvent(socket, event);
|
||||||
|
|
||||||
@@ -115,16 +90,12 @@ void wxSocketSelectManager::Uninstall_Callback(wxSocketImpl *socket_,
|
|||||||
if ( !dispatcher )
|
if ( !dispatcher )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
socket->RemoveFlag(flag);
|
socket->DisableCallback(flag);
|
||||||
|
|
||||||
if ( !socket->GetFlags() )
|
if ( !socket->HasAnyEnabledCallbacks() )
|
||||||
{
|
|
||||||
dispatcher->UnregisterFD(fd);
|
dispatcher->UnregisterFD(fd);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
dispatcher->ModifyFD(fd, socket, socket->GetEnabledCallbacks());
|
||||||
dispatcher->ModifyFD(fd, socket, socket->GetFlags());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the wxBase variable to point to our wxSocketManager implementation
|
// set the wxBase variable to point to our wxSocketManager implementation
|
||||||
|
Reference in New Issue
Block a user