X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ce3ed50dbe32d118321082db84c3a9abb047d5b7..04e8174b84ae91681417eb06fc54d3660e306606:/include/wx/socket.h diff --git a/include/wx/socket.h b/include/wx/socket.h index ebd5a5ecd6..ef410dbc30 100644 --- a/include/wx/socket.h +++ b/include/wx/socket.h @@ -22,15 +22,6 @@ #if defined(__WINDOWS__) && defined(WXSOCK_INTERNAL) #include #include - -struct wxSockInternal { - UINT my_msg; -}; - -struct wxSockHandlerInternal { - HWND sockWin; - UINT firstAvailableMsg; -}; #endif // defined(__WINDOWS__) && defined(WXSOCK_INTERNAL) // --------------------------------------------------------------------------- @@ -40,29 +31,6 @@ struct wxSockHandlerInternal { #include #include #include - -// --------------------------------------------------------------------------- -// Athena specific -// --------------------------------------------------------------------------- -#if defined(__WXXT__) || defined(__WXMOTIF__) -#include - -struct wxSockInternal { - XtInputId sock_inputid, sock_outputid, sock_exceptid; -}; -#endif - -// --------------------------------------------------------------------------- -// GTK specific -// --------------------------------------------------------------------------- -#if defined(__WXGTK__) -#include - -struct wxSockInternal { - gint sock_inputid, sock_outputid, sock_exceptid; -}; -#endif - #endif // defined(__UNIX__) && defined(WXSOCK_INTERNAL) // --------------------------------------------------------------------------- @@ -77,67 +45,46 @@ struct wxSockInternal { class WXDLLEXPORT wxSocketEvent; class WXDLLEXPORT wxSocketHandler; +class wxSocketInternal; class WXDLLEXPORT wxSocketBase : public wxEvtHandler { DECLARE_CLASS(wxSocketBase) #ifdef __WXMAC__ -friend void wxMacSocketOnRequestProc(void *refcon , short event) ; + friend void wxMacSocketOnRequestProc(void *refcon , short event) ; #endif public: enum wxSockFlags { NONE=0, NOWAIT=1, WAITALL=2, SPEED=4 }; // Type of request enum { REQ_READ=0x1, REQ_PEEK=0x2, REQ_WRITE=0x4, REQ_LOST=0x8, - REQ_ACCEPT=0x10, REQ_CONNECT=0x20}; + REQ_ACCEPT=0x10, REQ_CONNECT=0x20, REQ_WAIT=0x40}; enum { EVT_READ=0, EVT_PEEK=1, EVT_WRITE=2, EVT_LOST=3, EVT_ACCEPT=4, EVT_CONNECT=5 }; typedef int wxRequestNotify; typedef int wxRequestEvent; + enum wxSockType { SOCK_CLIENT, SOCK_SERVER, SOCK_INTERNAL, SOCK_UNINIT }; typedef void (*wxSockCbk)(wxSocketBase& sock,wxRequestEvent evt,char *cdata); protected: - wxList req_list[EVT_WRITE+1]; - - // Internal use for SaveState() and RestoreState() - class wxSockState : public wxObject { - public: - bool cbk_on; - wxSockCbk cbk; - char *cdata; - bool notif; - wxRequestNotify cbk_set; - wxSockFlags flags; - }; - typedef struct { - char sig[4]; - char len[4]; - } SockMsg; - enum wxSockType { SOCK_CLIENT, SOCK_SERVER, SOCK_INTERNAL, SOCK_UNINIT }; - wxSockFlags m_flags; wxSockType m_type; // wxSocket type bool m_connected, m_connecting; // State of the socket int m_fd; // Socket file descriptors - int m_waitflags; // Wait flags wxList m_states; // States list - wxSockCbk m_cbk; // C callback - char *m_cdata; // C callback data int m_id; // Socket id (for event handler) wxSocketHandler *m_handler; // the current socket handler wxRequestNotify m_neededreq; // Specify which requet signals we need - bool m_cbkon; - char *m_unread; // The unread buf - size_t m_unrd_size; // The size of the unread buf - bool m_processing; // To prevent some endless loop unsigned long m_timeout; - int m_wantbuf; size_t m_lcount; // Last IO request size int m_error; // Last IO error - bool m_notifyme; - - struct wxSockInternal *m_internal; // System specific variables - + wxSocketInternal *m_internal; + char *m_unread; // Pushback buffer + size_t m_unrd_size; // Pushback buffer size + wxSockCbk m_cbk; + char *m_cdata; + bool m_notify_state; + public: wxSocketBase(); virtual ~wxSocketBase(); @@ -147,9 +94,9 @@ public: wxSocketBase& Peek(char* buffer, size_t nbytes); wxSocketBase& Read(char* buffer, size_t nbytes); wxSocketBase& Write(const char *buffer, size_t nbytes); - wxSocketBase& WriteMsg(const char *buffer, size_t nbytes); - wxSocketBase& ReadMsg(char* buffer, size_t nbytes); wxSocketBase& Unread(const char *buffer, size_t nbytes); + wxSocketBase& ReadMsg(char *buffer, size_t nbytes); + wxSocketBase& WriteMsg(const char *buffer, size_t nbytes); void Discard(); // Try not to use this two methods (they sould be protected) @@ -165,8 +112,10 @@ public: bool IsData() const; inline size_t LastCount() const { return m_lcount; } inline int LastError() const { return m_error; } + inline wxSockType GetType() const { return m_type; } - inline void SetFlags(wxSockFlags _flags); + void SetFlags(wxSockFlags _flags); + wxSockFlags GetFlags() const; inline void SetTimeout(unsigned long sec) { m_timeout = sec; } // seconds = -1 means infinite wait @@ -210,6 +159,7 @@ public: protected: friend class wxSocketServer; friend class wxSocketHandler; + friend class wxSocketInternal; #ifdef __SALFORDC__ public: @@ -227,10 +177,6 @@ protected: inline virtual void SetHandler(wxSocketHandler *handler) { m_handler = handler; } - // Activate or disactivate callback - void SetupCallbacks(); - void DestroyCallbacks(); - // Pushback library size_t GetPushback(char *buffer, size_t size, bool peek); @@ -238,8 +184,6 @@ protected: // ==> cause strange things :-) void WantSpeedBuffer(char *buffer, size_t size, wxRequestEvent req); void WantBuffer(char *buffer, size_t size, wxRequestEvent req); - - virtual bool DoRequests(wxRequestEvent req); }; //////////////////////////////////////////////////////////////////////// @@ -255,7 +199,6 @@ public: wxSocketBase* Accept(); bool AcceptWith(wxSocketBase& sock); - virtual void OnRequest(wxRequestEvent flags); }; //////////////////////////////////////////////////////////////////////// @@ -281,10 +224,6 @@ class WXDLLEXPORT wxSocketHandler : public wxObject { DECLARE_CLASS(wxSocketHandler) protected: -#if defined(__WINDOWS__) - wxList *smsg_list; - struct wxSockHandlerInternal *internal; -#endif wxList *socks; public: @@ -315,17 +254,6 @@ public: // Create or reuse a socket handler static wxSocketHandler& Master() { return *master; } - -#if defined(WXSOCK_INTERNAL) && defined(__WINDOWS__) - - friend LRESULT APIENTRY _EXPORT wxSocketHandlerWndProc(HWND hWnd, - UINT message, WPARAM wParam, LPARAM lParam); - - UINT NewMessage(wxSocketBase *sock); - void DestroyMessage(UINT msg); - - HWND GetHWND() const; -#endif }; class WXDLLEXPORT wxSocketEvent : public wxEvent { @@ -334,15 +262,18 @@ public: wxSocketEvent(int id = 0); wxSocketBase::wxRequestEvent SocketEvent() const { return m_skevt; } + wxSocketBase *Socket() const { return m_socket; } + + void CopyObject(wxObject& obj_d) const; + public: wxSocketBase::wxRequestEvent m_skevt; + wxSocketBase *m_socket; }; typedef void (wxEvtHandler::*wxSocketEventFunction)(wxSocketEvent&); -#define wxEVT_SOCKET wxEVT_FIRST+301 - -#define EVT_SOCKET(id, func) { wxEVT_SOCKET, id, 0, \ +#define EVT_SOCKET(id, func) { wxEVT_SOCKET, id, -1, \ (wxObjectEventFunction) (wxEventFunction) (wxSocketEventFunction) & func, \ (wxObject *) NULL },