X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f26d81383f3fcce3262eaa3cfd158adba59b19da..4f7c00f237b6308394adb074fc94a0de8e2391d5:/include/wx/socket.h diff --git a/include/wx/socket.h b/include/wx/socket.h index 6895d8987c..e978b5ca80 100644 --- a/include/wx/socket.h +++ b/include/wx/socket.h @@ -93,6 +93,9 @@ enum wxSocketType }; +// event +class WXDLLIMPEXP_FWD_NET wxSocketEvent; +wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_NET, wxEVT_SOCKET, wxSocketEvent); // -------------------------------------------------------------------------- // wxSocketBase @@ -162,7 +165,7 @@ public: wxSocketFlags GetFlags() const { return m_flags; } void SetFlags(wxSocketFlags flags); - void SetTimeout(long seconds); + virtual void SetTimeout(long seconds); long GetTimeout() const { return m_timeout; } bool GetOption(int level, int optname, void *optval, int *optlen); @@ -176,11 +179,21 @@ public: void SetNotify(wxSocketEventFlags flags); void Notify(bool notify); - // initialize/shutdown the sockets (usually called automatically) - static bool IsInitialized(); + // initialize/shutdown the sockets (done automatically so there is no need + // to call these functions usually) + // + // should always be called from the main thread only so one of the cases + // where they should indeed be called explicitly is when the first wxSocket + // object in the application is created in a different thread static bool Initialize(); static void Shutdown(); + // check if wxSocket had been already initialized + // + // notice that this function should be only called from the main thread as + // otherwise it is inherently unsafe because Initialize/Shutdown() may be + // called concurrently with it in the main thread + static bool IsInitialized(); // Implementation from now on // -------------------------- @@ -204,21 +217,19 @@ private: // wait until the given flags are set for this socket or the given timeout // (or m_timeout) expires // - // notice that wxSOCKET_LOST_FLAG is always taken into account but the - // return value depends on whether it is included in flags or not: if it - // is, and the connection is indeed lost, true is returned, but if it isn't - // then the function returns false in this case - // - // false is always returned if we returned because of the timeout expiration - bool DoWait(long timeout, wxSocketEventFlags flags); + // notice that wxSOCKET_LOST_FLAG is always taken into account and the + // function returns -1 if the connection was lost; otherwise it returns + // true if any of the events specified by flags argument happened or false + // if the timeout expired + int DoWait(long timeout, wxSocketEventFlags flags); // a helper calling DoWait() using the same convention as the public // WaitForXXX() functions use, i.e. use our timeout if seconds == -1 or the // specified timeout otherwise - bool DoWait(long seconds, long milliseconds, wxSocketEventFlags flags); + int DoWait(long seconds, long milliseconds, wxSocketEventFlags flags); // another helper calling DoWait() using our m_timeout - bool DoWaitWithTimeout(wxSocketEventFlags flags) + int DoWaitWithTimeout(wxSocketEventFlags flags) { return DoWait(m_timeout*1000, flags); } @@ -263,14 +274,11 @@ private: wxSocketEventFlags m_eventmask; // which events to notify? wxSocketEventFlags m_eventsgot; // collects events received in OnRequest() - // the initialization count, wxSocket is initialized if > 0 - static size_t m_countInit; - friend class wxSocketReadGuard; friend class wxSocketWriteGuard; - DECLARE_NO_COPY_CLASS(wxSocketBase) + wxDECLARE_NO_COPY_CLASS(wxSocketBase); DECLARE_CLASS(wxSocketBase) }; @@ -290,7 +298,7 @@ public: bool WaitForAccept(long seconds = -1, long milliseconds = 0); - DECLARE_NO_COPY_CLASS(wxSocketServer) + wxDECLARE_NO_COPY_CLASS(wxSocketServer); DECLARE_CLASS(wxSocketServer) }; @@ -329,7 +337,7 @@ private: int m_initialRecvBufferSize; int m_initialSendBufferSize; - DECLARE_NO_COPY_CLASS(wxSocketClient) + wxDECLARE_NO_COPY_CLASS(wxSocketClient); DECLARE_CLASS(wxSocketClient) }; @@ -358,7 +366,7 @@ public: */ private: - DECLARE_NO_COPY_CLASS(wxDatagramSocket) + wxDECLARE_NO_COPY_CLASS(wxDatagramSocket); DECLARE_CLASS(wxDatagramSocket) }; @@ -381,6 +389,7 @@ public: void *GetClientData() const { return m_clientData; } virtual wxEvent *Clone() const { return new wxSocketEvent(*this); } + virtual wxEventCategory GetEventCategory() const { return wxEVT_CATEGORY_SOCKET; } public: wxSocketNotify m_event; @@ -393,7 +402,7 @@ public: typedef void (wxEvtHandler::*wxSocketEventFunction)(wxSocketEvent&); #define wxSocketEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSocketEventFunction, &func) + wxEVENT_HANDLER_CAST(wxSocketEventFunction, func) #define EVT_SOCKET(id, func) \ wx__DECLARE_EVT1(wxEVT_SOCKET, id, wxSocketEventHandler(func))