Build fix.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31903 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -153,10 +153,10 @@ static WSAEnumNetworkEventsFunc gs_WSAEnumNetworkEvents = NULL;
|
|||||||
/* This structure will be used to pass data on to the thread that handles socket events.
|
/* This structure will be used to pass data on to the thread that handles socket events.
|
||||||
*/
|
*/
|
||||||
typedef struct thread_data{
|
typedef struct thread_data{
|
||||||
HWND hEvtWin;
|
HWND hEvtWin;
|
||||||
unsigned long msgnumber;
|
unsigned long msgnumber;
|
||||||
unsigned long fd;
|
unsigned long fd;
|
||||||
unsigned long lEvent;
|
unsigned long lEvent;
|
||||||
}thread_data;
|
}thread_data;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -170,120 +170,122 @@ static HMODULE gs_wsock32dll = 0;
|
|||||||
*/
|
*/
|
||||||
DWORD WINAPI SocketThread(LPVOID data)
|
DWORD WINAPI SocketThread(LPVOID data)
|
||||||
{
|
{
|
||||||
WSANETWORKEVENTS NetworkEvents;
|
WSANETWORKEVENTS NetworkEvents;
|
||||||
thread_data* d = (thread_data *)data;
|
thread_data* d = (thread_data *)data;
|
||||||
|
|
||||||
HANDLE NetworkEvent = gs_WSACreateEvent();
|
HANDLE NetworkEvent = gs_WSACreateEvent();
|
||||||
gs_WSAEventSelect(d->fd, NetworkEvent, d->lEvent);
|
gs_WSAEventSelect(d->fd, NetworkEvent, d->lEvent);
|
||||||
|
|
||||||
while(socket_running)
|
while(socket_running)
|
||||||
{
|
{
|
||||||
if ((gs_WSAWaitForMultipleEvents(1, &NetworkEvent, FALSE,INFINITE, FALSE)) == WAIT_FAILED)
|
if ((gs_WSAWaitForMultipleEvents(1, &NetworkEvent, FALSE,INFINITE, FALSE)) == WAIT_FAILED)
|
||||||
{
|
{
|
||||||
printf("WSAWaitForMultipleEvents failed with error %d\n", WSAGetLastError());
|
printf("WSAWaitForMultipleEvents failed with error %d\n", WSAGetLastError());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (gs_WSAEnumNetworkEvents(d->fd ,NetworkEvent, &NetworkEvents) == SOCKET_ERROR)
|
if (gs_WSAEnumNetworkEvents(d->fd ,NetworkEvent, &NetworkEvents) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
printf("WSAEnumNetworkEvents failed with error %d\n", WSAGetLastError());
|
printf("WSAEnumNetworkEvents failed with error %d\n", WSAGetLastError());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long flags = NetworkEvents.lNetworkEvents;
|
long flags = NetworkEvents.lNetworkEvents;
|
||||||
if (flags & FD_READ)
|
if (flags & FD_READ)
|
||||||
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_READ);
|
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_READ);
|
||||||
if (flags & FD_WRITE)
|
if (flags & FD_WRITE)
|
||||||
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_WRITE);
|
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_WRITE);
|
||||||
if (flags & FD_OOB)
|
if (flags & FD_OOB)
|
||||||
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_OOB);
|
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_OOB);
|
||||||
if (flags & FD_ACCEPT)
|
if (flags & FD_ACCEPT)
|
||||||
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_ACCEPT);
|
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_ACCEPT);
|
||||||
if (flags & FD_CONNECT)
|
if (flags & FD_CONNECT)
|
||||||
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_CONNECT);
|
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_CONNECT);
|
||||||
if (flags & FD_CLOSE)
|
if (flags & FD_CLOSE)
|
||||||
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_CLOSE);
|
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_CLOSE);
|
||||||
|
|
||||||
}
|
}
|
||||||
gs_WSAEventSelect(d->fd, NetworkEvent, 0);
|
gs_WSAEventSelect(d->fd, NetworkEvent, 0);
|
||||||
ExitThread(0);
|
ExitThread(0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
|
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
|
||||||
{ return true; }
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Global initializers */
|
/* Global initializers */
|
||||||
|
|
||||||
bool GSocketGUIFunctionsTableConcrete::OnInit()
|
bool GSocketGUIFunctionsTableConcrete::OnInit()
|
||||||
{
|
{
|
||||||
static LPCTSTR pclassname = NULL;
|
static LPCTSTR pclassname = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Create internal window for event notifications */
|
/* Create internal window for event notifications */
|
||||||
hWin = wxCreateHiddenWindow(&pclassname, CLASSNAME, _GSocket_Internal_WinProc);
|
hWin = wxCreateHiddenWindow(&pclassname, CLASSNAME, _GSocket_Internal_WinProc);
|
||||||
if (!hWin)
|
if (!hWin)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Initialize socket list */
|
/* Initialize socket list */
|
||||||
InitializeCriticalSection(&critical);
|
InitializeCriticalSection(&critical);
|
||||||
|
|
||||||
for (i = 0; i < MAXSOCKETS; i++)
|
for (i = 0; i < MAXSOCKETS; i++)
|
||||||
{
|
{
|
||||||
socketList[i] = NULL;
|
socketList[i] = NULL;
|
||||||
}
|
}
|
||||||
firstAvailable = 0;
|
firstAvailable = 0;
|
||||||
|
|
||||||
/* Load WSAAsyncSelect from wsock32.dll (we don't link against it
|
/* Load WSAAsyncSelect from wsock32.dll (we don't link against it
|
||||||
statically to avoid dependency on wsock32.dll for apps that don't use
|
statically to avoid dependency on wsock32.dll for apps that don't use
|
||||||
sockets): */
|
sockets): */
|
||||||
#ifndef __WXWINCE__
|
#ifndef __WXWINCE__
|
||||||
gs_wsock32dll = LoadLibrary(wxT("wsock32.dll"));
|
gs_wsock32dll = LoadLibrary(wxT("wsock32.dll"));
|
||||||
if (!gs_wsock32dll)
|
if (!gs_wsock32dll)
|
||||||
return false;
|
return false;
|
||||||
gs_WSAAsyncSelect =(WSAAsyncSelectFunc)GetProcAddress(gs_wsock32dll,
|
gs_WSAAsyncSelect =(WSAAsyncSelectFunc)GetProcAddress(gs_wsock32dll,
|
||||||
wxT("WSAAsyncSelect"));
|
"WSAAsyncSelect");
|
||||||
if (!gs_WSAAsyncSelect)
|
if (!gs_WSAAsyncSelect)
|
||||||
return false;
|
return false;
|
||||||
#else
|
#else
|
||||||
/* On WinCE we load ws2.dll which will provide the needed functions.
|
/* On WinCE we load ws2.dll which will provide the needed functions.
|
||||||
*/
|
*/
|
||||||
gs_wsock32dll = LoadLibrary(wxT("ws2.dll"));
|
gs_wsock32dll = LoadLibrary(wxT("ws2.dll"));
|
||||||
if (!gs_wsock32dll)
|
if (!gs_wsock32dll)
|
||||||
return false;
|
return false;
|
||||||
gs_WSAEventSelect =(WSAEventSelectFunc)GetProcAddress(gs_wsock32dll,
|
gs_WSAEventSelect =(WSAEventSelectFunc)GetProcAddress(gs_wsock32dll,
|
||||||
wxT("WSAEventSelect"));
|
wxT("WSAEventSelect"));
|
||||||
if (!gs_WSAEventSelect)
|
if (!gs_WSAEventSelect)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
gs_WSACreateEvent =(WSACreateEventFunc)GetProcAddress(gs_wsock32dll,
|
gs_WSACreateEvent =(WSACreateEventFunc)GetProcAddress(gs_wsock32dll,
|
||||||
wxT("WSACreateEvent"));
|
wxT("WSACreateEvent"));
|
||||||
if (!gs_WSACreateEvent)
|
if (!gs_WSACreateEvent)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
gs_WSAWaitForMultipleEvents =(WSAWaitForMultipleEventsFunc)GetProcAddress(gs_wsock32dll,
|
gs_WSAWaitForMultipleEvents =(WSAWaitForMultipleEventsFunc)GetProcAddress(gs_wsock32dll,
|
||||||
wxT("WSAWaitForMultipleEvents"));
|
wxT("WSAWaitForMultipleEvents"));
|
||||||
if (!gs_WSAWaitForMultipleEvents)
|
if (!gs_WSAWaitForMultipleEvents)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
gs_WSAEnumNetworkEvents =(WSAEnumNetworkEventsFunc)GetProcAddress(gs_wsock32dll,
|
gs_WSAEnumNetworkEvents =(WSAEnumNetworkEventsFunc)GetProcAddress(gs_wsock32dll,
|
||||||
wxT("WSAEnumNetworkEvents"));
|
wxT("WSAEnumNetworkEvents"));
|
||||||
if (!gs_WSAEnumNetworkEvents)
|
if (!gs_WSAEnumNetworkEvents)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
currSocket = 0;
|
currSocket = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSocketGUIFunctionsTableConcrete::OnExit()
|
void GSocketGUIFunctionsTableConcrete::OnExit()
|
||||||
{
|
{
|
||||||
#ifdef __WXWINCE__
|
#ifdef __WXWINCE__
|
||||||
/* Delete the threads here */
|
/* Delete the threads here */
|
||||||
for(unsigned int i=0; i < currSocket; i++)
|
for(unsigned int i=0; i < currSocket; i++)
|
||||||
CloseHandle(hThread[i]);
|
CloseHandle(hThread[i]);
|
||||||
#endif
|
#endif
|
||||||
/* Destroy internal window */
|
/* Destroy internal window */
|
||||||
DestroyWindow(hWin);
|
DestroyWindow(hWin);
|
||||||
@@ -429,15 +431,15 @@ void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
|
|||||||
#else
|
#else
|
||||||
/*
|
/*
|
||||||
* WinCE creates a thread for socket event handling.
|
* WinCE creates a thread for socket event handling.
|
||||||
* All needed parameters get passed through the thread_data structure.
|
* All needed parameters get passed through the thread_data structure.
|
||||||
*/
|
*/
|
||||||
socket_running = true;
|
socket_running = true;
|
||||||
thread_data* d = new thread_data;
|
thread_data* d = new thread_data;
|
||||||
d->lEvent = lEvent;
|
d->lEvent = lEvent;
|
||||||
d->hEvtWin = hWin;
|
d->hEvtWin = hWin;
|
||||||
d->msgnumber = socket->m_msgnumber;
|
d->msgnumber = socket->m_msgnumber;
|
||||||
d->fd = socket->m_fd;
|
d->fd = socket->m_fd;
|
||||||
hThread[currSocket++] = CreateThread(NULL, 0, &SocketThread,(LPVOID)d, 0, NULL);
|
hThread[currSocket++] = CreateThread(NULL, 0, &SocketThread,(LPVOID)d, 0, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -454,9 +456,9 @@ void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
|
|||||||
#ifndef __WXWINCE__
|
#ifndef __WXWINCE__
|
||||||
gs_WSAAsyncSelect(socket->m_fd, hWin, socket->m_msgnumber, 0);
|
gs_WSAAsyncSelect(socket->m_fd, hWin, socket->m_msgnumber, 0);
|
||||||
#else
|
#else
|
||||||
//Destroy the thread
|
//Destroy the thread
|
||||||
//TODO: This needs to be changed, maybe using another global event that could be triggered.
|
//TODO: This needs to be changed, maybe using another global event that could be triggered.
|
||||||
socket_running = false;
|
socket_running = false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user