From 4b4d23c77e1971e8eb2df9bbd7e4ef817e8f447e Mon Sep 17 00:00:00 2001 From: David Elliott Date: Tue, 3 Aug 2004 03:33:36 +0000 Subject: [PATCH] Prepare headers for C->C++ migration git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28593 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gsocket.h | 39 +++++++++++- include/wx/msw/gsockmsw.h | 127 +++++++++++++++++++++++++++++++++++++- 2 files changed, 161 insertions(+), 5 deletions(-) diff --git a/include/wx/gsocket.h b/include/wx/gsocket.h index de0791b0c4..d19b9daf3a 100644 --- a/include/wx/gsocket.h +++ b/include/wx/gsocket.h @@ -11,10 +11,14 @@ #ifndef __GSOCKET_H #define __GSOCKET_H +#ifdef __WINDOWS__ +/* #define wxUSE_GSOCKET_CPLUSPLUS 1 */ +#undef wxUSE_GSOCKET_CPLUSPLUS +#else /* DFE: Define this and compile gsocket.cpp instead of gsocket.c and compile existing GUI gsock*.c as C++ to try out the new GSocket. */ -/* #define wxUSE_GSOCKET_CPLUSPLUS 1 */ #undef wxUSE_GSOCKET_CPLUSPLUS +#endif #if !defined(__cplusplus) && defined(wxUSE_GSOCKET_CPLUSPLUS) #error "You need to compile this file (probably a GUI gsock peice) as C++" #endif @@ -45,7 +49,11 @@ #endif #ifdef wxUSE_GSOCKET_CPLUSPLUS +# ifdef __WINDOWS__ +class GSocket; +# else typedef class GSocketBSD GSocket; +# endif #endif #ifdef __cplusplus @@ -116,6 +124,26 @@ struct GSocketBaseFunctionsTable }; #endif +#if defined(__WINDOWS__) && defined(wxUSE_GSOCKET_CPLUSPLUS) +/* Actually this is a misnomer now, but reusing this name means I don't + have to ifdef app traits or common socket code */ +class GSocketGUIFunctionsTable +{ +public: + virtual bool OnInit() = 0; + virtual void OnExit() = 0; + virtual bool CanUseEventLoop() = 0; + virtual bool Init_Socket(GSocket *socket) = 0; + virtual void Destroy_Socket(GSocket *socket) = 0; +#ifndef __WINDOWS__ + virtual void Install_Callback(GSocket *socket, GSocketEvent event) = 0; + virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event) = 0; +#endif + virtual void Enable_Events(GSocket *socket) = 0; + virtual void Disable_Events(GSocket *socket) = 0; +}; + +#else struct GSocketGUIFunctionsTable { int (*GUI_Init)(void); @@ -129,6 +157,7 @@ struct GSocketGUIFunctionsTable void (*Enable_Events)(GSocket *socket); void (*Disable_Events)(GSocket *socket); }; +#endif /* defined(__WINDOWS__) && defined(wxUSE_GSOCKET_CPLUSPLUS) */ /* Global initializers */ @@ -147,7 +176,9 @@ void GSocket_Cleanup(void); /* Constructors / Destructors */ GSocket *GSocket_new(void); +#if !defined(__WINDOWS__) || !defined(wxUSE_GSOCKET_CPLUSPLUS) void GSocket_destroy(GSocket *socket); +#endif #ifndef wxUSE_GSOCKET_CPLUSPLUS @@ -391,7 +422,11 @@ GSocketError GAddress_UNIX_GetPath(GAddress *address, char *path, size_t sbuf); #endif /* __cplusplus */ #ifdef wxUSE_GSOCKET_CPLUSPLUS -#include "wx/unix/gsockunx.h" +# ifdef __WINDOWS__ +# include "wx/msw/gsockmsw.h" +# else +# include "wx/unix/gsockunx.h" +# endif #endif #endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */ diff --git a/include/wx/msw/gsockmsw.h b/include/wx/msw/gsockmsw.h index 848fede04d..7fad130400 100644 --- a/include/wx/msw/gsockmsw.h +++ b/include/wx/msw/gsockmsw.h @@ -21,11 +21,11 @@ #include "gsocket.h" #endif +#ifdef wxUSE_GSOCKET_CPLUSPLUS +#include "wx/msw/wrapwin.h" +#else #include #include - -#ifdef __cplusplus -extern "C" { #endif #ifndef TRUE @@ -36,9 +36,73 @@ extern "C" { #define FALSE 0 #endif +#ifdef wxUSE_GSOCKET_CPLUSPLUS +class GSocketGUIFunctionsTableConcrete: public GSocketGUIFunctionsTable +{ +public: + virtual bool OnInit(); + virtual void OnExit(); + virtual bool CanUseEventLoop(); + virtual bool Init_Socket(GSocket *socket); + virtual void Destroy_Socket(GSocket *socket); + virtual void Enable_Events(GSocket *socket); + virtual void Disable_Events(GSocket *socket); +}; +#endif /* def wxUSE_GSOCKET_CPLUSPLUS */ + +#if defined(__cplusplus) && !defined wxUSE_GSOCKET_CPLUSPLUS +extern "C" { +#endif + /* Definition of GSocket */ +#ifdef wxUSE_GSOCKET_CPLUSPLUS +class GSocket +#else struct _GSocket +#endif { +#ifdef wxUSE_GSOCKET_CPLUSPLUS +public: + GSocket(); + ~GSocket(); + bool IsOk() { return m_ok; } + void Close(); + void Shutdown(); + GSocketError SetLocal(GAddress *address); + GSocketError SetPeer(GAddress *address); + GAddress *GetLocal(); + GAddress *GetPeer(); + GSocketError SetServer(); + GSocket *WaitConnection(); + int SetReusable(); + GSocketError Connect(GSocketStream stream); + GSocketError SetNonOriented(); + int Read(char *buffer, int size); + int Write(const char *buffer, int size); + GSocketEventFlags Select(GSocketEventFlags flags); + void SetNonBlocking(bool non_block); + void SetTimeout(unsigned long millis); + GSocketError GetError(); + void SetCallback(GSocketEventFlags flags, + GSocketCallback callback, char *cdata); + void UnsetCallback(GSocketEventFlags flags); + GSocketError GetSockOpt(int level, int optname, + void *optval, int *optlen); + GSocketError SetSockOpt(int level, int optname, + const void *optval, int optlen); +protected: + GSocketError Input_Timeout(); + GSocketError Output_Timeout(); + GSocketError Connect_Timeout(); + int Recv_Stream(char *buffer, int size); + int Recv_Dgram(char *buffer, int size); + int Send_Stream(const char *buffer, int size); + int Send_Dgram(const char *buffer, int size); + bool m_ok; + +/* TODO: Make these protected */ +public: +#endif /* def wxUSE_GSOCKET_CPLUSPLUS */ SOCKET m_fd; GAddress *m_local; GAddress *m_peer; @@ -59,6 +123,61 @@ struct _GSocket int m_msgnumber; }; +#ifdef wxUSE_GSOCKET_CPLUSPLUS +/* TODO: Fix src/common/socket.cpp to use the new API */ +inline void GSocket_Shutdown(GSocket *socket) +{ socket->Shutdown(); } +inline GSocketError GSocket_SetLocal(GSocket *socket, GAddress *address) +{ return socket->SetLocal(address); } +inline GSocketError GSocket_SetPeer(GSocket *socket, GAddress *address) +{ return socket->SetPeer(address); } +inline GAddress *GSocket_GetLocal(GSocket *socket) +{ return socket->GetLocal(); } +inline GAddress *GSocket_GetPeer(GSocket *socket) +{ return socket->GetPeer(); } +inline GSocketError GSocket_SetServer(GSocket *socket) +{ return socket->SetServer(); } +inline GSocket *GSocket_WaitConnection(GSocket *socket) +{ return socket->WaitConnection(); } +inline int GSocket_SetReusable(GSocket *socket) +{ return socket->SetReusable(); } +inline GSocketError GSocket_Connect(GSocket *socket, GSocketStream stream) +{ return socket->Connect(stream); } +inline GSocketError GSocket_SetNonOriented(GSocket *socket) +{ return socket->SetNonOriented(); } +inline int GSocket_Read(GSocket *socket, char *buffer, int size) +{ return socket->Read(buffer,size); } +inline int GSocket_Write(GSocket *socket, const char *buffer, int size) +{ return socket->Write(buffer,size); } +inline GSocketEventFlags GSocket_Select(GSocket *socket, GSocketEventFlags flags) +{ return socket->Select(flags); } +inline void GSocket_SetNonBlocking(GSocket *socket, int non_block) +{ socket->SetNonBlocking(non_block); } +inline void GSocket_SetTimeout(GSocket *socket, unsigned long millisec) +{ socket->SetTimeout(millisec); } +inline void GSocket_SetCallback(GSocket *socket, GSocketEventFlags flags, + GSocketCallback fallback, char *cdata) +{ socket->SetCallback(flags,fallback,cdata); } +inline void GSocket_UnsetCallback(GSocket *socket, GSocketEventFlags flags) +{ socket->UnsetCallback(flags); } +inline GSocketError GSocket_GetSockOpt(GSocket *socket, int level, int optname, + void *optval, int *optlen) +{ return socket->GetSockOpt(level,optname,optval,optlen); } +inline GSocketError GSocket_SetSockOpt(GSocket *socket, int level, int optname, + const void *optval, int optlen) +{ return socket->SetSockOpt(level,optname,optval,optlen); } +inline void GSocket_destroy(GSocket *socket) +{ delete socket; } +#endif /* def wxUSE_GSOCKET_CPLUSPLUS */ + +#if defined(__cplusplus) && !defined wxUSE_GSOCKET_CPLUSPLUS +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + /* Definition of GAddress */ struct _GAddress { @@ -71,6 +190,7 @@ struct _GAddress GSocketError m_error; }; +#ifndef wxUSE_GSOCKET_CPLUSPLUS /* Input / output */ GSocketError _GSocket_Input_Timeout(GSocket *socket); @@ -92,6 +212,7 @@ LRESULT CALLBACK _GSocket_Internal_WinProc(HWND, UINT, WPARAM, LPARAM); void _GSocket_Enable_Events(GSocket *socket); void _GSocket_Disable_Events(GSocket *socket); +#endif /* ndef wxUSE_GSOCKET_CPLUSPLUS */ /* GAddress */ -- 2.47.2