more socket cleanup to allow using wxSocket from both wxBase and wxCore (replaces patch 1756260)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50831 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-12-19 16:45:08 +00:00
parent 4813bb8d72
commit 2804f77d88
54 changed files with 3817 additions and 1933 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -54,6 +54,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<!-- UNIX -->
<!-- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<set var="BASE_UNIX_SRC" hints="files">
src/common/gsocketiohandler.cpp
src/common/fdiodispatcher.cpp
src/common/selectdispatcher.cpp
src/unix/appunix.cpp
@@ -74,6 +75,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
</set>
<set var="BASE_UNIX_HDR" hints="files">
wx/private/fdiodispatcher.h
wx/private/gsocketiohandler.h
wx/private/selectdispatcher.h
wx/unix/app.h
wx/unix/apptbase.h
@@ -155,6 +157,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<!-- Used on Mac OS CarbonLib, Mac OS X wxMac base, and Mac OS X darwin base -->
<set var="BASE_COREFOUNDATION_SRC" hints="files">
src/mac/corefoundation/cfstring.cpp
src/mac/corefoundation/gsockosx.cpp
src/mac/corefoundation/stdpaths_cf.cpp
src/mac/corefoundation/strconv_cf.cpp
src/mac/corefoundation/utilsexc_base.cpp
@@ -549,6 +552,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="NET_WIN32_SRC" hints="files">
src/msw/gsocket.cpp
src/msw/gsockmsw.cpp
src/msw/urlmsw.cpp
</set>
<set var="NET_WIN32_HDR" hints="files">
@@ -1482,7 +1486,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="X11_LOWLEVEL_SRC" hints="files">
$(XWIN_LOWLEVEL_SRC)
src/common/gsocketiohandler.cpp
src/generic/icon.cpp
src/generic/timer.cpp
src/x11/app.cpp
@@ -1577,7 +1580,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/msw/gdiobj.cpp
src/msw/gdiplus.cpp
src/msw/graphics.cpp
src/msw/gsockmsw.cpp
src/msw/icon.cpp
src/msw/imaglist.cpp
src/msw/minifram.cpp
@@ -1906,7 +1908,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="DFB_LOWLEVEL_SRC" hints="files">
src/common/fontmgrcmn.cpp
src/common/gsocketiohandler.cpp
src/generic/caret.cpp
src/generic/colour.cpp
src/generic/icon.cpp
@@ -2148,7 +2149,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="MAC_OSX_LOWLEVEL_SRC" hints="files">
<!-- Shared wxMac and wxCocoa files -->
src/mac/corefoundation/gsockosx.cpp
src/mac/corefoundation/hid.cpp
src/mac/corefoundation/utilsexc_cf.cpp
</set>
@@ -2460,7 +2460,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="COCOA_LOWLEVEL_SRC" hints="files">
<!-- Shared wxMac and wxCocoa files -->
src/mac/corefoundation/gsockosx.cpp
src/mac/corefoundation/hid.cpp
src/mac/corefoundation/utilsexc_cf.cpp
</set>

View File

@@ -417,6 +417,7 @@ MONODLL_OBJECTS = \
$(OBJS)\monodll_socket.obj \
$(OBJS)\monodll_url.obj \
$(OBJS)\monodll_gsocket.obj \
$(OBJS)\monodll_gsockmsw.obj \
$(OBJS)\monodll_urlmsw.obj \
$(____MONOLIB_GUI_SRC_FILENAMES_OBJECTS) \
$(OBJS)\monodll_xml.obj \
@@ -553,6 +554,7 @@ MONOLIB_OBJECTS = \
$(OBJS)\monolib_socket.obj \
$(OBJS)\monolib_url.obj \
$(OBJS)\monolib_gsocket.obj \
$(OBJS)\monolib_gsockmsw.obj \
$(OBJS)\monolib_urlmsw.obj \
$(____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS) \
$(OBJS)\monolib_xml.obj \
@@ -814,6 +816,7 @@ NETDLL_OBJECTS = \
$(OBJS)\netdll_socket.obj \
$(OBJS)\netdll_url.obj \
$(OBJS)\netdll_gsocket.obj \
$(OBJS)\netdll_gsockmsw.obj \
$(OBJS)\netdll_urlmsw.obj
NETLIB_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
@@ -836,6 +839,7 @@ NETLIB_OBJECTS = \
$(OBJS)\netlib_socket.obj \
$(OBJS)\netlib_url.obj \
$(OBJS)\netlib_gsocket.obj \
$(OBJS)\netlib_gsockmsw.obj \
$(OBJS)\netlib_urlmsw.obj
COREDLL_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
@@ -1490,7 +1494,6 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gdiobj.obj \
$(OBJS)\monodll_gdiplus.obj \
$(OBJS)\monodll_graphics.obj \
$(OBJS)\monodll_gsockmsw.obj \
$(OBJS)\monodll_icon.obj \
$(OBJS)\monodll_imaglist.obj \
$(OBJS)\monodll_minifram.obj \
@@ -1719,7 +1722,6 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gdiobj.obj \
$(OBJS)\monodll_gdiplus.obj \
$(OBJS)\monodll_graphics.obj \
$(OBJS)\monodll_gsockmsw.obj \
$(OBJS)\monodll_icon.obj \
$(OBJS)\monodll_imaglist.obj \
$(OBJS)\monodll_minifram.obj \
@@ -2133,7 +2135,6 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gdiobj.obj \
$(OBJS)\monolib_gdiplus.obj \
$(OBJS)\monolib_graphics.obj \
$(OBJS)\monolib_gsockmsw.obj \
$(OBJS)\monolib_icon.obj \
$(OBJS)\monolib_imaglist.obj \
$(OBJS)\monolib_minifram.obj \
@@ -2362,7 +2363,6 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gdiobj.obj \
$(OBJS)\monolib_gdiplus.obj \
$(OBJS)\monolib_graphics.obj \
$(OBJS)\monolib_gsockmsw.obj \
$(OBJS)\monolib_icon.obj \
$(OBJS)\monolib_imaglist.obj \
$(OBJS)\monolib_minifram.obj \
@@ -2691,7 +2691,6 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_gdiobj.obj \
$(OBJS)\coredll_gdiplus.obj \
$(OBJS)\coredll_graphics.obj \
$(OBJS)\coredll_gsockmsw.obj \
$(OBJS)\coredll_icon.obj \
$(OBJS)\coredll_imaglist.obj \
$(OBJS)\coredll_minifram.obj \
@@ -2920,7 +2919,6 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_gdiobj.obj \
$(OBJS)\coredll_gdiplus.obj \
$(OBJS)\coredll_graphics.obj \
$(OBJS)\coredll_gsockmsw.obj \
$(OBJS)\coredll_icon.obj \
$(OBJS)\coredll_imaglist.obj \
$(OBJS)\coredll_minifram.obj \
@@ -3155,7 +3153,6 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_gdiobj.obj \
$(OBJS)\corelib_gdiplus.obj \
$(OBJS)\corelib_graphics.obj \
$(OBJS)\corelib_gsockmsw.obj \
$(OBJS)\corelib_icon.obj \
$(OBJS)\corelib_imaglist.obj \
$(OBJS)\corelib_minifram.obj \
@@ -3384,7 +3381,6 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_gdiobj.obj \
$(OBJS)\corelib_gdiplus.obj \
$(OBJS)\corelib_graphics.obj \
$(OBJS)\corelib_gsockmsw.obj \
$(OBJS)\corelib_icon.obj \
$(OBJS)\corelib_imaglist.obj \
$(OBJS)\corelib_minifram.obj \
@@ -5503,6 +5499,9 @@ $(OBJS)\monodll_url.obj: ..\..\src\common\url.cpp
$(OBJS)\monodll_gsocket.obj: ..\..\src\msw\gsocket.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
$(OBJS)\monodll_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
$(OBJS)\monodll_urlmsw.obj: ..\..\src\msw\urlmsw.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
@@ -6094,11 +6093,6 @@ $(OBJS)\monodll_graphics.obj: ..\..\src\msw\graphics.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_icon.obj: ..\..\src\msw\icon.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
@@ -7603,6 +7597,9 @@ $(OBJS)\monolib_url.obj: ..\..\src\common\url.cpp
$(OBJS)\monolib_gsocket.obj: ..\..\src\msw\gsocket.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
$(OBJS)\monolib_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
$(OBJS)\monolib_urlmsw.obj: ..\..\src\msw\urlmsw.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
@@ -8194,11 +8191,6 @@ $(OBJS)\monolib_graphics.obj: ..\..\src\msw\graphics.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_icon.obj: ..\..\src\msw\icon.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
@@ -10012,6 +10004,9 @@ $(OBJS)\netdll_url.obj: ..\..\src\common\url.cpp
$(OBJS)\netdll_gsocket.obj: ..\..\src\msw\gsocket.cpp
$(CXX) -q -c -P -o$@ $(NETDLL_CXXFLAGS) $**
$(OBJS)\netdll_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) -q -c -P -o$@ $(NETDLL_CXXFLAGS) $**
$(OBJS)\netdll_urlmsw.obj: ..\..\src\msw\urlmsw.cpp
$(CXX) -q -c -P -o$@ $(NETDLL_CXXFLAGS) $**
@@ -10051,6 +10046,9 @@ $(OBJS)\netlib_url.obj: ..\..\src\common\url.cpp
$(OBJS)\netlib_gsocket.obj: ..\..\src\msw\gsocket.cpp
$(CXX) -q -c -P -o$@ $(NETLIB_CXXFLAGS) $**
$(OBJS)\netlib_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) -q -c -P -o$@ $(NETLIB_CXXFLAGS) $**
$(OBJS)\netlib_urlmsw.obj: ..\..\src\msw\urlmsw.cpp
$(CXX) -q -c -P -o$@ $(NETLIB_CXXFLAGS) $**
@@ -10348,11 +10346,6 @@ $(OBJS)\coredll_graphics.obj: ..\..\src\msw\graphics.cpp
$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_icon.obj: ..\..\src\msw\icon.cpp
$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $**
@@ -11659,11 +11652,6 @@ $(OBJS)\corelib_graphics.obj: ..\..\src\msw\graphics.cpp
$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_icon.obj: ..\..\src\msw\icon.cpp
$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $**

View File

@@ -402,6 +402,7 @@ MONODLL_OBJECTS = \
$(OBJS)\monodll_socket.o \
$(OBJS)\monodll_url.o \
$(OBJS)\monodll_gsocket.o \
$(OBJS)\monodll_gsockmsw.o \
$(OBJS)\monodll_urlmsw.o \
$(____MONOLIB_GUI_SRC_FILENAMES_OBJECTS) \
$(OBJS)\monodll_xml.o \
@@ -539,6 +540,7 @@ MONOLIB_OBJECTS = \
$(OBJS)\monolib_socket.o \
$(OBJS)\monolib_url.o \
$(OBJS)\monolib_gsocket.o \
$(OBJS)\monolib_gsockmsw.o \
$(OBJS)\monolib_urlmsw.o \
$(____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS) \
$(OBJS)\monolib_xml.o \
@@ -804,6 +806,7 @@ NETDLL_OBJECTS = \
$(OBJS)\netdll_socket.o \
$(OBJS)\netdll_url.o \
$(OBJS)\netdll_gsocket.o \
$(OBJS)\netdll_gsockmsw.o \
$(OBJS)\netdll_urlmsw.o
NETLIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) $(GCCFLAGS) \
-DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) \
@@ -826,6 +829,7 @@ NETLIB_OBJECTS = \
$(OBJS)\netlib_socket.o \
$(OBJS)\netlib_url.o \
$(OBJS)\netlib_gsocket.o \
$(OBJS)\netlib_gsockmsw.o \
$(OBJS)\netlib_urlmsw.o
COREDLL_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
$(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
@@ -1505,7 +1509,6 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gdiobj.o \
$(OBJS)\monodll_gdiplus.o \
$(OBJS)\monodll_graphics.o \
$(OBJS)\monodll_gsockmsw.o \
$(OBJS)\monodll_icon.o \
$(OBJS)\monodll_imaglist.o \
$(OBJS)\monodll_minifram.o \
@@ -1736,7 +1739,6 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gdiobj.o \
$(OBJS)\monodll_gdiplus.o \
$(OBJS)\monodll_graphics.o \
$(OBJS)\monodll_gsockmsw.o \
$(OBJS)\monodll_icon.o \
$(OBJS)\monodll_imaglist.o \
$(OBJS)\monodll_minifram.o \
@@ -2154,7 +2156,6 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gdiobj.o \
$(OBJS)\monolib_gdiplus.o \
$(OBJS)\monolib_graphics.o \
$(OBJS)\monolib_gsockmsw.o \
$(OBJS)\monolib_icon.o \
$(OBJS)\monolib_imaglist.o \
$(OBJS)\monolib_minifram.o \
@@ -2385,7 +2386,6 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gdiobj.o \
$(OBJS)\monolib_gdiplus.o \
$(OBJS)\monolib_graphics.o \
$(OBJS)\monolib_gsockmsw.o \
$(OBJS)\monolib_icon.o \
$(OBJS)\monolib_imaglist.o \
$(OBJS)\monolib_minifram.o \
@@ -2728,7 +2728,6 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_gdiobj.o \
$(OBJS)\coredll_gdiplus.o \
$(OBJS)\coredll_graphics.o \
$(OBJS)\coredll_gsockmsw.o \
$(OBJS)\coredll_icon.o \
$(OBJS)\coredll_imaglist.o \
$(OBJS)\coredll_minifram.o \
@@ -2959,7 +2958,6 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_gdiobj.o \
$(OBJS)\coredll_gdiplus.o \
$(OBJS)\coredll_graphics.o \
$(OBJS)\coredll_gsockmsw.o \
$(OBJS)\coredll_icon.o \
$(OBJS)\coredll_imaglist.o \
$(OBJS)\coredll_minifram.o \
@@ -3200,7 +3198,6 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_gdiobj.o \
$(OBJS)\corelib_gdiplus.o \
$(OBJS)\corelib_graphics.o \
$(OBJS)\corelib_gsockmsw.o \
$(OBJS)\corelib_icon.o \
$(OBJS)\corelib_imaglist.o \
$(OBJS)\corelib_minifram.o \
@@ -3431,7 +3428,6 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_gdiobj.o \
$(OBJS)\corelib_gdiplus.o \
$(OBJS)\corelib_graphics.o \
$(OBJS)\corelib_gsockmsw.o \
$(OBJS)\corelib_icon.o \
$(OBJS)\corelib_imaglist.o \
$(OBJS)\corelib_minifram.o \
@@ -5643,6 +5639,9 @@ $(OBJS)\monodll_url.o: ../../src/common/url.cpp
$(OBJS)\monodll_gsocket.o: ../../src/msw/gsocket.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_gsockmsw.o: ../../src/msw/gsockmsw.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_urlmsw.o: ../../src/msw/urlmsw.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@@ -6234,11 +6233,6 @@ $(OBJS)\monodll_graphics.o: ../../src/msw/graphics.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_gsockmsw.o: ../../src/msw/gsockmsw.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_icon.o: ../../src/msw/icon.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@@ -7845,6 +7839,9 @@ $(OBJS)\monolib_url.o: ../../src/common/url.cpp
$(OBJS)\monolib_gsocket.o: ../../src/msw/gsocket.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_gsockmsw.o: ../../src/msw/gsockmsw.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_urlmsw.o: ../../src/msw/urlmsw.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -8436,11 +8433,6 @@ $(OBJS)\monolib_graphics.o: ../../src/msw/graphics.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_gsockmsw.o: ../../src/msw/gsockmsw.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_icon.o: ../../src/msw/icon.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -10356,6 +10348,9 @@ $(OBJS)\netdll_url.o: ../../src/common/url.cpp
$(OBJS)\netdll_gsocket.o: ../../src/msw/gsocket.cpp
$(CXX) -c -o $@ $(NETDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\netdll_gsockmsw.o: ../../src/msw/gsockmsw.cpp
$(CXX) -c -o $@ $(NETDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\netdll_urlmsw.o: ../../src/msw/urlmsw.cpp
$(CXX) -c -o $@ $(NETDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -10395,6 +10390,9 @@ $(OBJS)\netlib_url.o: ../../src/common/url.cpp
$(OBJS)\netlib_gsocket.o: ../../src/msw/gsocket.cpp
$(CXX) -c -o $@ $(NETLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\netlib_gsockmsw.o: ../../src/msw/gsockmsw.cpp
$(CXX) -c -o $@ $(NETLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\netlib_urlmsw.o: ../../src/msw/urlmsw.cpp
$(CXX) -c -o $@ $(NETLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -10692,11 +10690,6 @@ $(OBJS)\coredll_graphics.o: ../../src/msw/graphics.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_gsockmsw.o: ../../src/msw/gsockmsw.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_icon.o: ../../src/msw/icon.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -12103,11 +12096,6 @@ $(OBJS)\corelib_graphics.o: ../../src/msw/graphics.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_gsockmsw.o: ../../src/msw/gsockmsw.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_icon.o: ../../src/msw/icon.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<

View File

@@ -419,6 +419,7 @@ MONODLL_OBJECTS = \
$(OBJS)\monodll_socket.obj \
$(OBJS)\monodll_url.obj \
$(OBJS)\monodll_gsocket.obj \
$(OBJS)\monodll_gsockmsw.obj \
$(OBJS)\monodll_urlmsw.obj \
$(____MONOLIB_GUI_SRC_FILENAMES_OBJECTS) \
$(OBJS)\monodll_xml.obj \
@@ -560,6 +561,7 @@ MONOLIB_OBJECTS = \
$(OBJS)\monolib_socket.obj \
$(OBJS)\monolib_url.obj \
$(OBJS)\monolib_gsocket.obj \
$(OBJS)\monolib_gsockmsw.obj \
$(OBJS)\monolib_urlmsw.obj \
$(____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS) \
$(OBJS)\monolib_xml.obj \
@@ -836,6 +838,7 @@ NETDLL_OBJECTS = \
$(OBJS)\netdll_socket.obj \
$(OBJS)\netdll_url.obj \
$(OBJS)\netdll_gsocket.obj \
$(OBJS)\netdll_gsockmsw.obj \
$(OBJS)\netdll_urlmsw.obj
NETLIB_CXXFLAGS = /M$(__RUNTIME_LIBS_167)$(__DEBUGRUNTIME) /DWIN32 \
$(__DEBUGINFO) \
@@ -861,6 +864,7 @@ NETLIB_OBJECTS = \
$(OBJS)\netlib_socket.obj \
$(OBJS)\netlib_url.obj \
$(OBJS)\netlib_gsocket.obj \
$(OBJS)\netlib_gsockmsw.obj \
$(OBJS)\netlib_urlmsw.obj
COREDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_181)$(__DEBUGRUNTIME) /DWIN32 \
$(__DEBUGINFO) \
@@ -1664,7 +1668,6 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gdiobj.obj \
$(OBJS)\monodll_gdiplus.obj \
$(OBJS)\monodll_graphics.obj \
$(OBJS)\monodll_gsockmsw.obj \
$(OBJS)\monodll_icon.obj \
$(OBJS)\monodll_imaglist.obj \
$(OBJS)\monodll_minifram.obj \
@@ -1893,7 +1896,6 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gdiobj.obj \
$(OBJS)\monodll_gdiplus.obj \
$(OBJS)\monodll_graphics.obj \
$(OBJS)\monodll_gsockmsw.obj \
$(OBJS)\monodll_icon.obj \
$(OBJS)\monodll_imaglist.obj \
$(OBJS)\monodll_minifram.obj \
@@ -2313,7 +2315,6 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gdiobj.obj \
$(OBJS)\monolib_gdiplus.obj \
$(OBJS)\monolib_graphics.obj \
$(OBJS)\monolib_gsockmsw.obj \
$(OBJS)\monolib_icon.obj \
$(OBJS)\monolib_imaglist.obj \
$(OBJS)\monolib_minifram.obj \
@@ -2542,7 +2543,6 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gdiobj.obj \
$(OBJS)\monolib_gdiplus.obj \
$(OBJS)\monolib_graphics.obj \
$(OBJS)\monolib_gsockmsw.obj \
$(OBJS)\monolib_icon.obj \
$(OBJS)\monolib_imaglist.obj \
$(OBJS)\monolib_minifram.obj \
@@ -2901,7 +2901,6 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_gdiobj.obj \
$(OBJS)\coredll_gdiplus.obj \
$(OBJS)\coredll_graphics.obj \
$(OBJS)\coredll_gsockmsw.obj \
$(OBJS)\coredll_icon.obj \
$(OBJS)\coredll_imaglist.obj \
$(OBJS)\coredll_minifram.obj \
@@ -3130,7 +3129,6 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_gdiobj.obj \
$(OBJS)\coredll_gdiplus.obj \
$(OBJS)\coredll_graphics.obj \
$(OBJS)\coredll_gsockmsw.obj \
$(OBJS)\coredll_icon.obj \
$(OBJS)\coredll_imaglist.obj \
$(OBJS)\coredll_minifram.obj \
@@ -3371,7 +3369,6 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_gdiobj.obj \
$(OBJS)\corelib_gdiplus.obj \
$(OBJS)\corelib_graphics.obj \
$(OBJS)\corelib_gsockmsw.obj \
$(OBJS)\corelib_icon.obj \
$(OBJS)\corelib_imaglist.obj \
$(OBJS)\corelib_minifram.obj \
@@ -3600,7 +3597,6 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_gdiobj.obj \
$(OBJS)\corelib_gdiplus.obj \
$(OBJS)\corelib_graphics.obj \
$(OBJS)\corelib_gsockmsw.obj \
$(OBJS)\corelib_icon.obj \
$(OBJS)\corelib_imaglist.obj \
$(OBJS)\corelib_minifram.obj \
@@ -5835,6 +5831,9 @@ $(OBJS)\monodll_url.obj: ..\..\src\common\url.cpp
$(OBJS)\monodll_gsocket.obj: ..\..\src\msw\gsocket.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
$(OBJS)\monodll_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
$(OBJS)\monodll_urlmsw.obj: ..\..\src\msw\urlmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
@@ -6426,11 +6425,6 @@ $(OBJS)\monodll_graphics.obj: ..\..\src\msw\graphics.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_icon.obj: ..\..\src\msw\icon.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
@@ -7935,6 +7929,9 @@ $(OBJS)\monolib_url.obj: ..\..\src\common\url.cpp
$(OBJS)\monolib_gsocket.obj: ..\..\src\msw\gsocket.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
$(OBJS)\monolib_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
$(OBJS)\monolib_urlmsw.obj: ..\..\src\msw\urlmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
@@ -8526,11 +8523,6 @@ $(OBJS)\monolib_graphics.obj: ..\..\src\msw\graphics.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_icon.obj: ..\..\src\msw\icon.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
@@ -10344,6 +10336,9 @@ $(OBJS)\netdll_url.obj: ..\..\src\common\url.cpp
$(OBJS)\netdll_gsocket.obj: ..\..\src\msw\gsocket.cpp
$(CXX) /c /nologo /TP /Fo$@ $(NETDLL_CXXFLAGS) $**
$(OBJS)\netdll_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(NETDLL_CXXFLAGS) $**
$(OBJS)\netdll_urlmsw.obj: ..\..\src\msw\urlmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(NETDLL_CXXFLAGS) $**
@@ -10383,6 +10378,9 @@ $(OBJS)\netlib_url.obj: ..\..\src\common\url.cpp
$(OBJS)\netlib_gsocket.obj: ..\..\src\msw\gsocket.cpp
$(CXX) /c /nologo /TP /Fo$@ $(NETLIB_CXXFLAGS) $**
$(OBJS)\netlib_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(NETLIB_CXXFLAGS) $**
$(OBJS)\netlib_urlmsw.obj: ..\..\src\msw\urlmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(NETLIB_CXXFLAGS) $**
@@ -10680,11 +10678,6 @@ $(OBJS)\coredll_graphics.obj: ..\..\src\msw\graphics.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_icon.obj: ..\..\src\msw\icon.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $**
@@ -11991,11 +11984,6 @@ $(OBJS)\corelib_graphics.obj: ..\..\src\msw\graphics.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_gsockmsw.obj: ..\..\src\msw\gsockmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $**
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_icon.obj: ..\..\src\msw\icon.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $**

View File

@@ -234,7 +234,6 @@ ____CORE_SRC_FILENAMES_OBJECTS = &
$(OBJS)\monodll_gdiobj.obj &
$(OBJS)\monodll_gdiplus.obj &
$(OBJS)\monodll_graphics.obj &
$(OBJS)\monodll_gsockmsw.obj &
$(OBJS)\monodll_icon.obj &
$(OBJS)\monodll_imaglist.obj &
$(OBJS)\monodll_minifram.obj &
@@ -465,7 +464,6 @@ ____CORE_SRC_FILENAMES_OBJECTS = &
$(OBJS)\monodll_gdiobj.obj &
$(OBJS)\monodll_gdiplus.obj &
$(OBJS)\monodll_graphics.obj &
$(OBJS)\monodll_gsockmsw.obj &
$(OBJS)\monodll_icon.obj &
$(OBJS)\monodll_imaglist.obj &
$(OBJS)\monodll_minifram.obj &
@@ -888,7 +886,6 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = &
$(OBJS)\monolib_gdiobj.obj &
$(OBJS)\monolib_gdiplus.obj &
$(OBJS)\monolib_graphics.obj &
$(OBJS)\monolib_gsockmsw.obj &
$(OBJS)\monolib_icon.obj &
$(OBJS)\monolib_imaglist.obj &
$(OBJS)\monolib_minifram.obj &
@@ -1119,7 +1116,6 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = &
$(OBJS)\monolib_gdiobj.obj &
$(OBJS)\monolib_gdiplus.obj &
$(OBJS)\monolib_graphics.obj &
$(OBJS)\monolib_gsockmsw.obj &
$(OBJS)\monolib_icon.obj &
$(OBJS)\monolib_imaglist.obj &
$(OBJS)\monolib_minifram.obj &
@@ -1473,7 +1469,6 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = &
$(OBJS)\coredll_gdiobj.obj &
$(OBJS)\coredll_gdiplus.obj &
$(OBJS)\coredll_graphics.obj &
$(OBJS)\coredll_gsockmsw.obj &
$(OBJS)\coredll_icon.obj &
$(OBJS)\coredll_imaglist.obj &
$(OBJS)\coredll_minifram.obj &
@@ -1704,7 +1699,6 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = &
$(OBJS)\coredll_gdiobj.obj &
$(OBJS)\coredll_gdiplus.obj &
$(OBJS)\coredll_graphics.obj &
$(OBJS)\coredll_gsockmsw.obj &
$(OBJS)\coredll_icon.obj &
$(OBJS)\coredll_imaglist.obj &
$(OBJS)\coredll_minifram.obj &
@@ -1947,7 +1941,6 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = &
$(OBJS)\corelib_gdiobj.obj &
$(OBJS)\corelib_gdiplus.obj &
$(OBJS)\corelib_graphics.obj &
$(OBJS)\corelib_gsockmsw.obj &
$(OBJS)\corelib_icon.obj &
$(OBJS)\corelib_imaglist.obj &
$(OBJS)\corelib_minifram.obj &
@@ -2178,7 +2171,6 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = &
$(OBJS)\corelib_gdiobj.obj &
$(OBJS)\corelib_gdiplus.obj &
$(OBJS)\corelib_graphics.obj &
$(OBJS)\corelib_gsockmsw.obj &
$(OBJS)\corelib_icon.obj &
$(OBJS)\corelib_imaglist.obj &
$(OBJS)\corelib_minifram.obj &
@@ -3354,6 +3346,7 @@ MONODLL_OBJECTS = &
$(OBJS)\monodll_socket.obj &
$(OBJS)\monodll_url.obj &
$(OBJS)\monodll_gsocket.obj &
$(OBJS)\monodll_gsockmsw.obj &
$(OBJS)\monodll_urlmsw.obj &
$(____MONOLIB_GUI_SRC_FILENAMES_OBJECTS) &
$(OBJS)\monodll_xml.obj &
@@ -3490,6 +3483,7 @@ MONOLIB_OBJECTS = &
$(OBJS)\monolib_socket.obj &
$(OBJS)\monolib_url.obj &
$(OBJS)\monolib_gsocket.obj &
$(OBJS)\monolib_gsockmsw.obj &
$(OBJS)\monolib_urlmsw.obj &
$(____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS) &
$(OBJS)\monolib_xml.obj &
@@ -3753,6 +3747,7 @@ NETDLL_OBJECTS = &
$(OBJS)\netdll_socket.obj &
$(OBJS)\netdll_url.obj &
$(OBJS)\netdll_gsocket.obj &
$(OBJS)\netdll_gsockmsw.obj &
$(OBJS)\netdll_urlmsw.obj
NETLIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
$(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
@@ -3775,6 +3770,7 @@ NETLIB_OBJECTS = &
$(OBJS)\netlib_socket.obj &
$(OBJS)\netlib_url.obj &
$(OBJS)\netlib_gsocket.obj &
$(OBJS)\netlib_gsockmsw.obj &
$(OBJS)\netlib_urlmsw.obj
COREDLL_CXXFLAGS = -bd $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
$(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
@@ -5877,6 +5873,9 @@ $(OBJS)\monodll_url.obj : .AUTODEPEND ..\..\src\common\url.cpp
$(OBJS)\monodll_gsocket.obj : .AUTODEPEND ..\..\src\msw\gsocket.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
$(OBJS)\monodll_gsockmsw.obj : .AUTODEPEND ..\..\src\msw\gsockmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
$(OBJS)\monodll_urlmsw.obj : .AUTODEPEND ..\..\src\msw\urlmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
@@ -6468,11 +6467,6 @@ $(OBJS)\monodll_graphics.obj : .AUTODEPEND ..\..\src\msw\graphics.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
!endif
!ifeq USE_GUI 1
$(OBJS)\monodll_gsockmsw.obj : .AUTODEPEND ..\..\src\msw\gsockmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
!endif
!ifeq USE_GUI 1
$(OBJS)\monodll_icon.obj : .AUTODEPEND ..\..\src\msw\icon.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
@@ -8079,6 +8073,9 @@ $(OBJS)\monolib_url.obj : .AUTODEPEND ..\..\src\common\url.cpp
$(OBJS)\monolib_gsocket.obj : .AUTODEPEND ..\..\src\msw\gsocket.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
$(OBJS)\monolib_gsockmsw.obj : .AUTODEPEND ..\..\src\msw\gsockmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
$(OBJS)\monolib_urlmsw.obj : .AUTODEPEND ..\..\src\msw\urlmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
@@ -8670,11 +8667,6 @@ $(OBJS)\monolib_graphics.obj : .AUTODEPEND ..\..\src\msw\graphics.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
!endif
!ifeq USE_GUI 1
$(OBJS)\monolib_gsockmsw.obj : .AUTODEPEND ..\..\src\msw\gsockmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
!endif
!ifeq USE_GUI 1
$(OBJS)\monolib_icon.obj : .AUTODEPEND ..\..\src\msw\icon.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
@@ -10590,6 +10582,9 @@ $(OBJS)\netdll_url.obj : .AUTODEPEND ..\..\src\common\url.cpp
$(OBJS)\netdll_gsocket.obj : .AUTODEPEND ..\..\src\msw\gsocket.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(NETDLL_CXXFLAGS) $<
$(OBJS)\netdll_gsockmsw.obj : .AUTODEPEND ..\..\src\msw\gsockmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(NETDLL_CXXFLAGS) $<
$(OBJS)\netdll_urlmsw.obj : .AUTODEPEND ..\..\src\msw\urlmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(NETDLL_CXXFLAGS) $<
@@ -10629,6 +10624,9 @@ $(OBJS)\netlib_url.obj : .AUTODEPEND ..\..\src\common\url.cpp
$(OBJS)\netlib_gsocket.obj : .AUTODEPEND ..\..\src\msw\gsocket.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(NETLIB_CXXFLAGS) $<
$(OBJS)\netlib_gsockmsw.obj : .AUTODEPEND ..\..\src\msw\gsockmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(NETLIB_CXXFLAGS) $<
$(OBJS)\netlib_urlmsw.obj : .AUTODEPEND ..\..\src\msw\urlmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(NETLIB_CXXFLAGS) $<
@@ -10926,11 +10924,6 @@ $(OBJS)\coredll_graphics.obj : .AUTODEPEND ..\..\src\msw\graphics.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
!endif
!ifeq USE_GUI 1
$(OBJS)\coredll_gsockmsw.obj : .AUTODEPEND ..\..\src\msw\gsockmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
!endif
!ifeq USE_GUI 1
$(OBJS)\coredll_icon.obj : .AUTODEPEND ..\..\src\msw\icon.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
@@ -12337,11 +12330,6 @@ $(OBJS)\corelib_graphics.obj : .AUTODEPEND ..\..\src\msw\graphics.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
!endif
!ifeq USE_GUI 1
$(OBJS)\corelib_gsockmsw.obj : .AUTODEPEND ..\..\src\msw\gsockmsw.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
!endif
!ifeq USE_GUI 1
$(OBJS)\corelib_icon.obj : .AUTODEPEND ..\..\src\msw\icon.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<

View File

@@ -1435,10 +1435,6 @@ SOURCE=..\..\src\msw\graphics.cpp
# End Source File
# Begin Source File
SOURCE=..\..\src\msw\gsockmsw.cpp
# End Source File
# Begin Source File
SOURCE=..\..\src\msw\helpchm.cpp
# End Source File
# Begin Source File

View File

@@ -298,6 +298,10 @@ SOURCE=..\..\src\msw\gsocket.cpp
# End Source File
# Begin Source File
SOURCE=..\..\src\msw\gsockmsw.cpp
# End Source File
# Begin Source File
SOURCE=..\..\src\msw\urlmsw.cpp
# End Source File
# Begin Source File

View File

@@ -7219,6 +7219,9 @@ if test "$wxUSE_GUI" = "yes"; then
fi
else
SAMPLES_SUBDIRS="console"
if test "$wxUSE_SOCKETS" = "yes" ; then
SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS sockets"
fi
fi
@@ -7852,7 +7855,14 @@ for subdir in $SUBDIRS; do
dnl don't take all samples/utils, just those which build with
dnl wxBase
if test ${subdir} = "samples"; then
makefiles="samples/Makefile.in samples/console/Makefile.in"
dnl only take those samples which compile in the current
dnl configuration and which exist
makefiles="samples/Makefile.in $makefiles"
for sample in `echo $SAMPLES_SUBDIRS`; do
if test -d $srcdir/samples/$sample; then
makefiles="samples/$sample/Makefile.in $makefiles"
fi
done
elif test ${subdir} = "utils"; then
makefiles=""
for util in HelpGen tex2rtf ; do

View File

@@ -165,7 +165,7 @@ Major new features in this release
- wxWidgets may now use either wchar_t (UTF-16/32) or UTF-8 internally,
depending on what is optimal for the target platform.
- Events loops and timers can now be used in wxBase, without GUI.
- Events loops, timers and sockets can now be used in wxBase, without GUI.
2.9.0

View File

@@ -30,7 +30,7 @@ class WXDLLIMPEXP_FWD_BASE wxString;
class WXDLLIMPEXP_FWD_BASE wxTimer;
class WXDLLIMPEXP_FWD_BASE wxTimerImpl;
class GSocketGUIFunctionsTable;
class GSocketManager;
// ----------------------------------------------------------------------------
@@ -116,13 +116,9 @@ public:
virtual void RemoveFromPendingDelete(wxObject *object) = 0;
#if wxUSE_SOCKETS
// return table of GUI callbacks for GSocket code or NULL in wxBase. This
// is needed because networking classes are in their own library and so
// they can't directly call GUI functions (the same net library can be
// used in both GUI and base apps). To complicate it further, GUI library
// ("wxCore") doesn't depend on networking library and so only a functions
// table can be passed around
virtual GSocketGUIFunctionsTable* GetSocketGUIFunctionsTable() = 0;
// return socket manager: this is usually different for console and GUI
// applications (although some ports use the same implementation for both)
virtual GSocketManager *GetSocketManager() = 0;
#endif
// create a new, port specific, instance of the event loop used by wxApp
@@ -220,9 +216,6 @@ public:
virtual wxFontMapper *CreateFontMapper();
#endif // wxUSE_FONTMAP
virtual wxRendererNative *CreateRenderer();
#if wxUSE_SOCKETS
virtual GSocketGUIFunctionsTable* GetSocketGUIFunctionsTable();
#endif
#ifdef __WXDEBUG__
virtual bool ShowAssertDialog(const wxString& msg);
@@ -264,9 +257,6 @@ public:
virtual wxFontMapper *CreateFontMapper();
#endif // wxUSE_FONTMAP
virtual wxRendererNative *CreateRenderer();
#if wxUSE_SOCKETS
virtual GSocketGUIFunctionsTable* GetSocketGUIFunctionsTable();
#endif
#ifdef __WXDEBUG__
virtual bool ShowAssertDialog(const wxString& msg);

View File

@@ -2,26 +2,24 @@
* Project: GSocket (Generic Socket)
* Name: gsocket.h
* Author: Guilhem Lavaux
* Guillermo Rodriguez Garcia <guille@iies.es> (maintainer)
* Guillermo Rodriguez Garcia <guille@iies.es>
* Copyright: (c) Guilhem Lavaux
* (c) 2007 Vadim Zeitlin <vadim@wxwidgets.org>
* Licence: wxWindows Licence
* Purpose: GSocket include file (system independent)
* CVSID: $Id$
* -------------------------------------------------------------------------
*/
#ifndef __GSOCKET_H
#define __GSOCKET_H
#ifndef _WX_GSOCKET_H_
#define _WX_GSOCKET_H_
#ifndef __GSOCKET_STANDALONE__
#include "wx/defs.h"
#if wxUSE_SOCKETS
#include "wx/dlimpexp.h" /* for WXDLLIMPEXP_NET */
#endif
#if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__)
#include <stddef.h>
/*
@@ -37,27 +35,24 @@
#include <stdlib.h>
#endif
class GSocket;
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _GAddress GAddress;
typedef enum {
enum GAddressType
{
GSOCK_NOFAMILY = 0,
GSOCK_INET,
GSOCK_INET6,
GSOCK_UNIX
} GAddressType;
};
typedef enum {
enum GSocketStream
{
GSOCK_STREAMED,
GSOCK_UNSTREAMED
} GSocketStream;
};
typedef enum {
enum GSocketError
{
GSOCK_NOERROR = 0,
GSOCK_INVOP,
GSOCK_IOERR,
@@ -69,19 +64,21 @@ typedef enum {
GSOCK_TIMEDOUT,
GSOCK_MEMERR,
GSOCK_OPTERR
} GSocketError;
};
/* See below for an explanation on how events work.
*/
typedef enum {
enum GSocketEvent
{
GSOCK_INPUT = 0,
GSOCK_OUTPUT = 1,
GSOCK_CONNECTION = 2,
GSOCK_LOST = 3,
GSOCK_MAX_EVENT = 4
} GSocketEvent;
};
enum {
enum
{
GSOCK_INPUT_FLAG = 1 << GSOCK_INPUT,
GSOCK_OUTPUT_FLAG = 1 << GSOCK_OUTPUT,
GSOCK_CONNECTION_FLAG = 1 << GSOCK_CONNECTION,
@@ -90,54 +87,99 @@ enum {
typedef int GSocketEventFlags;
class GSocket;
typedef void (*GSocketCallback)(GSocket *socket, GSocketEvent event,
char *cdata);
/*
Class providing hooks abstracting the differences between console and GUI
applications for socket code.
/* Functions tables for internal use by GSocket code: */
/* 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
We also have different implementations of this class for different platforms
allowing us to keep more things in the common code but the main reason for
its existence is that we want the same socket code work differently
depending on whether it's used from a console or a GUI program. This is
achieved by implementing the virtual methods of this class differently in
the objects returned by wxConsoleAppTraits::GetSocketFunctionsTable() and
the same method in wxGUIAppTraits.
*/
class GSocketManager
{
public:
// needed since this class declares virtual members
virtual ~GSocketGUIFunctionsTable() { }
// set the manager to use, we don't take ownership of it
//
// this should be called before GSocket_Init(), i.e. before the first
// wxSocket object is created, otherwise the manager returned by
// wxAppTraits::GetSocketManager() will be used
static void Set(GSocketManager *manager);
// return the manager to use
//
// this initializes the manager at first use
static GSocketManager *Get()
{
if ( !ms_manager )
Init();
return ms_manager;
}
// called before the first wxSocket is created and should do the
// initializations needed in order to use the network
//
// return true if initialized successfully
virtual bool OnInit() = 0;
// undo the initializations of OnInit()
virtual void OnExit() = 0;
virtual bool CanUseEventLoop() = 0;
// do manager-specific socket initializations (and undo it): this is called
// in the beginning/end of the socket initialization/destruction
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;
virtual ~GSocketManager() { }
private:
// get the manager to use if we don't have it yet
static void Init();
static GSocketManager *ms_manager;
};
#if defined(__WINDOWS__)
#include "wx/msw/gsockmsw.h"
#else
#include "wx/unix/gsockunx.h"
#endif
/* Global initializers */
/* Sets GUI functions callbacks. Must be called *before* GSocket_Init
if the app uses async sockets. */
void GSocket_SetGUIFunctions(GSocketGUIFunctionsTable *guifunc);
/* GSocket_Init() must be called at the beginning */
int GSocket_Init(void);
/* GSocket_Init() must be called at the beginning (but after calling
* GSocketManager::Set() if a custom manager should be used) */
bool GSocket_Init();
/* GSocket_Cleanup() must be called at the end */
void GSocket_Cleanup(void);
void GSocket_Cleanup();
/* Constructors / Destructors */
GSocket *GSocket_new(void);
GSocket *GSocket_new();
/* GAddress */
GAddress *GAddress_new(void);
GAddress *GAddress_new();
GAddress *GAddress_copy(GAddress *address);
void GAddress_destroy(GAddress *address);
@@ -185,16 +227,6 @@ unsigned short GAddress_INET6_GetPort(GAddress *address);
GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path);
GSocketError GAddress_UNIX_GetPath(GAddress *address, char *path, size_t sbuf);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* wxUSE_SOCKETS */
# if defined(__WINDOWS__)
# include "wx/msw/gsockmsw.h"
# else
# include "wx/unix/gsockunx.h"
# endif
#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */
#endif /* __GSOCKET_H */
#endif /* _WX_GSOCKET_H_ */

View File

@@ -13,7 +13,8 @@
#define _WX_PRIVATE_H_
#include "wx/defs.h"
#include "X11/Xlib.h"
#include <X11/Xlib.h>
#include <Xm/Xm.h>
#include "wx/evtloop.h"
class WXDLLIMPEXP_FWD_CORE wxFont;

View File

@@ -45,10 +45,32 @@ public:
// the GUI code, WAIT_OBJECT_0 + 1 if a Windows message arrived
virtual WXDWORD WaitForThread(WXHANDLE hThread) = 0;
// wxSocket support
// ----------------
#if wxUSE_SOCKETS
// this function is used by wxNet library to set the default socket manager
// to use: doing it like this allows us to keep all socket-related code in
// wxNet instead of having to pull it in wxBase itself as we'd have to do
// if we really implemented GSocketManager here
//
// we don't take ownership of this pointer, it should have a lifetime
// greater than that of any socket (e.g. be a pointer to a static object)
static void SetDefaultSocketManager(GSocketManager *manager)
{
ms_manager = manager;
}
virtual GSocketManager *GetSocketManager() { return ms_manager; }
#endif // wxUSE_SOCKETS
protected:
// implementation of WaitForThread() for the console applications which is
// also used by the GUI code if it doesn't [yet|already} dispatch events
WXDWORD DoSimpleWaitForThread(WXHANDLE hThread);
static GSocketManager *ms_manager;
};
#endif // _WX_MSW_APPTBASE_H_

View File

@@ -8,20 +8,8 @@
* -------------------------------------------------------------------------
*/
#ifndef __GSOCK_MSW_H
#define __GSOCK_MSW_H
#ifndef __GSOCKET_STANDALONE__
#include "wx/setup.h"
#endif
#if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__)
#ifndef __GSOCKET_STANDALONE__
#include "wx/gsocket.h"
#else
#include "gsocket.h"
#endif
#ifndef _WX_MSW_GSOCKMSW_H_
#define _WX_MSW_GSOCKMSW_H_
#include "wx/msw/wrapwin.h"
@@ -35,18 +23,6 @@
#include <winsock.h>
#endif
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);
};
/* Definition of GSocket */
class GSocket
{
@@ -62,6 +38,8 @@ public:
GAddress *GetPeer();
GSocketError SetServer();
GSocket *WaitConnection();
// not used under MSW
void Notify(bool) { }
bool SetReusable();
bool SetBroadcast();
bool DontDoBind();
@@ -123,10 +101,6 @@ public:
int m_msgnumber;
};
#ifdef __cplusplus
extern "C" {
#endif
/* Definition of GAddress */
struct _GAddress
{
@@ -149,10 +123,4 @@ GSocketError _GAddress_translate_to (GAddress *address,
GSocketError _GAddress_Init_INET(GAddress *address);
GSocketError _GAddress_Init_UNIX(GAddress *address);
#ifdef __cplusplus
}
#endif
#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */
#endif /* __GSOCK_MSW_H */
#endif /* _WX_MSW_GSOCKMSW_H_ */

View File

@@ -2,7 +2,6 @@
// Name: wx/private/gsocketiohandler.h
// Purpose: class for registering GSocket in wxSelectDispatcher
// Authors: Lukasz Michalski
// Modified by:
// Created: December 2006
// Copyright: (c) Lukasz Michalski
// RCS-ID: $Id$
@@ -13,30 +12,34 @@
#define _WX_PRIVATE_GSOCKETIOHANDLER_H_
#include "wx/defs.h"
#if wxUSE_SOCKETS && wxUSE_SELECT_DISPATCHER
#include "wx/private/selectdispatcher.h"
#include "wx/gsocket.h"
#if wxUSE_SOCKETS
// forward declarations
class GSocket;
class WXDLLIMPEXP_CORE wxGSocketIOHandler : public wxFDIOHandler
class WXDLLIMPEXP_BASE wxGSocketIOHandler : public wxFDIOHandler
{
public:
wxGSocketIOHandler(GSocket* socket);
int GetFlags() const;
void RemoveFlag(wxFDIODispatcherEntryFlags flag);
void AddFlag(wxFDIODispatcherEntryFlags flag);
wxGSocketIOHandler(GSocket* socket)
{
m_socket = socket;
m_flags = 0;
}
virtual void OnReadWaiting();
virtual void OnWriteWaiting();
virtual void OnExceptionWaiting();
int GetFlags() const { return m_flags; }
void RemoveFlag(wxFDIODispatcherEntryFlags flag) { m_flags &= ~flag; }
void AddFlag(wxFDIODispatcherEntryFlags flag) { m_flags |= flag; }
virtual void OnReadWaiting() { m_socket->Detected_Read(); }
virtual void OnWriteWaiting() { m_socket->Detected_Write(); }
virtual void OnExceptionWaiting() { m_socket->Detected_Read(); }
private:
GSocket* m_socket;
int m_flags;
};
#endif // wxUSE_SOCKETS
#endif // wxUSE_SOCKETS && wxUSE_SELECT_DISPATCHER
#endif // _WX_PRIVATE_SOCKETEVTDISPATCH_H_

View File

@@ -48,6 +48,13 @@ public:
// ----------------
// TODO
#if wxUSE_SOCKETS
// returns the select()-based socket manager for console applications which
// is also used by some ports (wxX11, wxDFB) in the GUI build (hence it is
// here and not in wxConsoleAppTraits)
virtual GSocketManager *GetSocketManager();
#endif
};
#endif // _WX_UNIX_APPTBASE_H_

View File

@@ -67,6 +67,17 @@ public:
#if defined(__WXDEBUG__) && defined(__WXGTK20__)
virtual bool ShowAssertDialog(const wxString& msg);
#endif
// GTK+ and Motif integrate sockets directly in their main loop, the other
// Unix ports do it at wxEventLoop level
//
// TODO: Should we use XtAddInput() for wxX11 too? Or, vice versa, if there
// is no advantage in doing this compared to the generic way
// currently used by wxX11, should we continue to use GTK/Motif-
// specific stuff?
#if wxUSE_SOCKETS && (defined(__WXGTK__) || defined(__WXMOTIF__))
virtual GSocketManager *GetSocketManager();
#endif
};
#endif // wxUSE_GUI

View File

@@ -8,37 +8,11 @@
* -------------------------------------------------------------------------
*/
#ifndef __GSOCK_UNX_H
#define __GSOCK_UNX_H
#ifndef __GSOCKET_STANDALONE__
#include "wx/setup.h"
#endif
#ifndef _WX_UNIX_GSOCKUNX_H_
#define _WX_UNIX_GSOCKUNX_H_
class wxGSocketIOHandler;
#if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__)
#ifndef __GSOCKET_STANDALONE__
#include "wx/gsocket.h"
#else
#include "gsocket.h"
#endif
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 Install_Callback(GSocket *socket, GSocketEvent event);
virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event);
virtual void Enable_Events(GSocket *socket);
virtual void Disable_Events(GSocket *socket);
};
class GSocket
{
public:
@@ -70,6 +44,8 @@ public:
GSocketError GetSockOpt(int level, int optname, void *optval, int *optlen);
GSocketError SetSockOpt(int level, int optname,
const void *optval, int optlen);
//attach or detach from main loop
void Notify(bool flag);
virtual void Detected_Read();
virtual void Detected_Write();
void SetInitialSocketBuffers(int recv, int send)
@@ -79,6 +55,9 @@ public:
}
protected:
//enable or disable event callback using gsocket gui callback table
void EnableEvents(bool flag = true);
void DisableEvents() { EnableEvents(false); }
void Enable(GSocketEvent event);
void Disable(GSocketEvent event);
GSocketError Input_Timeout();
@@ -108,18 +87,18 @@ public:
bool m_dobind;
unsigned long m_timeout;
// true if socket should fire events
bool m_use_events;
/* Callbacks */
GSocketEventFlags m_detected;
GSocketCallback m_cbacks[GSOCK_MAX_EVENT];
char *m_data[GSOCK_MAX_EVENT];
char *m_gui_dependent;
// pointer for storing extra (usually GUI-specific) data
void *m_gui_dependent;
};
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Definition of GAddress */
struct _GAddress
{
@@ -131,15 +110,6 @@ struct _GAddress
GSocketError m_error;
};
#ifdef __cplusplus
}
#endif /* __cplusplus */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* GAddress */
@@ -150,11 +120,121 @@ GSocketError _GAddress_translate_to (GAddress *address,
GSocketError _GAddress_Init_INET(GAddress *address);
GSocketError _GAddress_Init_UNIX(GAddress *address);
// A version of GSocketManager which uses FDs for socket IO
//
// This class uses GSocket::m_gui_dependent field to store the 2 (for input and
// output) FDs associated with the socket.
class GSocketFDBasedManager : public GSocketManager
{
public:
// no special initialization/cleanup needed when using FDs
virtual bool OnInit() { return true; }
virtual void OnExit() { }
#ifdef __cplusplus
}
#endif /* __cplusplus */
// allocate/free the storage we need
virtual bool Init_Socket(GSocket *socket)
{
socket->m_gui_dependent = malloc(sizeof(int)*2);
int * const fds = wx_static_cast(int *, socket->m_gui_dependent);
#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */
fds[0] = -1;
fds[1] = -1;
#endif /* __GSOCK_UNX_H */
return true;
}
virtual void Destroy_Socket(GSocket *socket)
{
free(socket->m_gui_dependent);
}
virtual void Enable_Events(GSocket *socket)
{
Install_Callback(socket, GSOCK_INPUT);
Install_Callback(socket, GSOCK_OUTPUT);
}
virtual void Disable_Events(GSocket *socket)
{
Uninstall_Callback(socket, GSOCK_INPUT);
Uninstall_Callback(socket, GSOCK_OUTPUT);
}
protected:
// identifies either input or output direction
//
// NB: the values of this enum shouldn't change
enum SocketDir
{
FD_INPUT,
FD_OUTPUT
};
// get the FD index corresponding to the given GSocketEvent
SocketDir GetDirForEvent(GSocket *socket, GSocketEvent event)
{
switch ( event )
{
default:
wxFAIL_MSG( "unexpected socket event" );
// fall through
case GSOCK_LOST:
// fall through
case GSOCK_INPUT:
return FD_INPUT;
case GSOCK_OUTPUT:
return FD_OUTPUT;
case GSOCK_CONNECTION:
// FIXME: explain this?
return socket->m_server ? FD_INPUT : FD_OUTPUT;
}
}
// access the FDs we store
int& FD(GSocket *socket, SocketDir d)
{
return wx_static_cast(int *, socket->m_gui_dependent)[d];
}
};
// Common base class for all ports using X11-like (and hence implemented in
// X11, Motif and GTK) AddInput() and RemoveInput() functions
class GSocketInputBasedManager : public GSocketFDBasedManager
{
public:
virtual void Install_Callback(GSocket *socket, GSocketEvent event)
{
wxCHECK_RET( socket->m_fd != -1,
"shouldn't be called on invalid socket" );
const SocketDir d = GetDirForEvent(socket, event);
int& fd = FD(socket, d);
if ( fd != -1 )
RemoveInput(fd);
fd = AddInput(socket, d);
}
virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event)
{
const SocketDir d = GetDirForEvent(socket, event);
int& fd = FD(socket, d);
if ( fd != -1 )
{
RemoveInput(fd);
fd = -1;
}
}
private:
// these functions map directly to XtAdd/RemoveInput() or
// gdk_input_add/remove()
virtual int AddInput(GSocket *socket, SocketDir d) = 0;
virtual void RemoveInput(int fd) = 0;
};
#endif /* _WX_UNIX_GSOCKUNX_H_ */

View File

@@ -59,6 +59,18 @@ SERVER_OBJECTS = \
$(os2_lib_res) \
server_server.o \
$(__server___win32rc)
BASECLIENT_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \
$(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \
-I$(srcdir) $(__DLLFLAG_p) -DwxUSE_GUI=0 $(CXXWARNINGS) $(CPPFLAGS) \
$(CXXFLAGS)
BASECLIENT_OBJECTS = \
baseclient_baseclient.o
BASESERVER_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \
$(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \
-I$(srcdir) $(__DLLFLAG_p) -DwxUSE_GUI=0 $(CXXWARNINGS) $(CPPFLAGS) \
$(CXXFLAGS)
BASESERVER_OBJECTS = \
baseserver_baseserver.o
### Conditionally set variables: ###
@@ -75,6 +87,7 @@ SERVER_OBJECTS = \
@COND_MONOLITHIC_1@EXTRALIBS_FOR_BASE = $(EXTRALIBS) $(EXTRALIBS_GUI)
@COND_MONOLITHIC_0@EXTRALIBS_FOR_GUI = $(EXTRALIBS_GUI)
@COND_MONOLITHIC_1@EXTRALIBS_FOR_GUI =
@COND_USE_GUI_1@__client___depname = client$(EXEEXT)
@COND_PLATFORM_MAC_1@__client___mac_setfilecmd = \
@COND_PLATFORM_MAC_1@ $(SETFILE) -a C client$(EXEEXT)
@COND_PLATFORM_MAC_1@__client___mac_rezcmd = $(__MACOSX_RESOURCES_p_2)
@@ -87,6 +100,7 @@ COND_PLATFORM_OS2_1___client___os2_emxbindcmd = $(NM) client$(EXEEXT) | if grep
@COND_TOOLKIT_MAC@____client_BUNDLE_TGT_REF_DEP = \
@COND_TOOLKIT_MAC@ client.app/Contents/PkgInfo
@COND_PLATFORM_WIN32_1@__client___win32rc = client_client_rc.o
@COND_USE_GUI_1@__server___depname = server$(EXEEXT)
@COND_PLATFORM_MAC_1@__server___mac_setfilecmd = \
@COND_PLATFORM_MAC_1@ $(SETFILE) -a C server$(EXEEXT)
@COND_PLATFORM_MAC_1@__server___mac_rezcmd = $(__MACOSX_RESOURCES_p_3)
@@ -99,6 +113,10 @@ COND_PLATFORM_OS2_1___server___os2_emxbindcmd = $(NM) server$(EXEEXT) | if grep
@COND_TOOLKIT_MAC@____server_BUNDLE_TGT_REF_DEP = \
@COND_TOOLKIT_MAC@ server.app/Contents/PkgInfo
@COND_PLATFORM_WIN32_1@__server___win32rc = server_server_rc.o
@COND_PLATFORM_MAC_1@__baseclient___mac_setfilecmd = \
@COND_PLATFORM_MAC_1@ $(SETFILE) -t APPL baseclient$(EXEEXT)
@COND_PLATFORM_MAC_1@__baseserver___mac_setfilecmd = \
@COND_PLATFORM_MAC_1@ $(SETFILE) -t APPL baseserver$(EXEEXT)
COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_2 = $(REZ) -d __DARWIN__ -t APPL -d \
__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_0) $(__EXCEPTIONS_DEFINE_p_0) \
$(__RTTI_DEFINE_p_0) $(__THREAD_DEFINE_p_0) -i $(srcdir) $(__DLLFLAG_p_0) -i \
@@ -111,21 +129,16 @@ COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_3 = $(REZ) -d __DARWIN__ -t APPL -d \
$(srcdir)/../../samples $(__RCDEFDIR_p) -i $(top_srcdir)/include -o \
server$(EXEEXT) Carbon.r sample.r
@COND_TOOLKIT_MAC@__MACOSX_RESOURCES_p_3 = $(COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_3)
@COND_WXUNIV_1@__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
@COND_WXUNIV_1@__WXUNIV_DEFINE_p_0 = -d __WXUNIVERSAL__
@COND_WXUNIV_1@__WXUNIV_DEFINE_p_6 = --define __WXUNIVERSAL__
@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS
@COND_WXUNIV_1@__WXUNIV_DEFINE_p_7 = --define __WXUNIVERSAL__
@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_0 = -d wxNO_EXCEPTIONS
@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_6 = --define wxNO_EXCEPTIONS
@COND_USE_RTTI_0@__RTTI_DEFINE_p = -DwxNO_RTTI
@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_7 = --define wxNO_EXCEPTIONS
@COND_USE_RTTI_0@__RTTI_DEFINE_p_0 = -d wxNO_RTTI
@COND_USE_RTTI_0@__RTTI_DEFINE_p_6 = --define wxNO_RTTI
@COND_USE_THREADS_0@__THREAD_DEFINE_p = -DwxNO_THREADS
@COND_USE_RTTI_0@__RTTI_DEFINE_p_7 = --define wxNO_RTTI
@COND_USE_THREADS_0@__THREAD_DEFINE_p_0 = -d wxNO_THREADS
@COND_USE_THREADS_0@__THREAD_DEFINE_p_6 = --define wxNO_THREADS
@COND_SHARED_1@__DLLFLAG_p = -DWXUSINGDLL
@COND_USE_THREADS_0@__THREAD_DEFINE_p_7 = --define wxNO_THREADS
@COND_SHARED_1@__DLLFLAG_p_0 = -d WXUSINGDLL
@COND_SHARED_1@__DLLFLAG_p_6 = --define WXUSINGDLL
@COND_SHARED_1@__DLLFLAG_p_7 = --define WXUSINGDLL
@COND_TOOLKIT_MSW@__RCDEFDIR_p = -i \
@COND_TOOLKIT_MSW@ $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME)
@COND_TOOLKIT_MSW@__RCDEFDIR_p_0 = --include-dir \
@@ -134,15 +147,6 @@ COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_3 = $(REZ) -d __DARWIN__ -t APPL -d \
COND_MONOLITHIC_0___WXLIB_CORE_p = \
-lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX)
@COND_MONOLITHIC_0@__WXLIB_CORE_p = $(COND_MONOLITHIC_0___WXLIB_CORE_p)
COND_MONOLITHIC_0___WXLIB_NET_p = \
-lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net-$(WX_RELEASE)$(HOST_SUFFIX)
@COND_MONOLITHIC_0@__WXLIB_NET_p = $(COND_MONOLITHIC_0___WXLIB_NET_p)
COND_MONOLITHIC_0___WXLIB_BASE_p = \
-lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
@COND_MONOLITHIC_0@__WXLIB_BASE_p = $(COND_MONOLITHIC_0___WXLIB_BASE_p)
COND_MONOLITHIC_1___WXLIB_MONO_p = \
-lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
@COND_MONOLITHIC_1@__WXLIB_MONO_p = $(COND_MONOLITHIC_1___WXLIB_MONO_p)
@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@__LIB_TIFF_p \
@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ = \
@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ -lwxtiff$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
@@ -152,6 +156,20 @@ COND_MONOLITHIC_1___WXLIB_MONO_p = \
@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@__LIB_PNG_p \
@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@ = \
@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@ -lwxpng$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
@COND_WXUNIV_1@__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS
@COND_USE_RTTI_0@__RTTI_DEFINE_p = -DwxNO_RTTI
@COND_USE_THREADS_0@__THREAD_DEFINE_p = -DwxNO_THREADS
@COND_SHARED_1@__DLLFLAG_p = -DWXUSINGDLL
COND_MONOLITHIC_0___WXLIB_NET_p = \
-lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net-$(WX_RELEASE)$(HOST_SUFFIX)
@COND_MONOLITHIC_0@__WXLIB_NET_p = $(COND_MONOLITHIC_0___WXLIB_NET_p)
COND_MONOLITHIC_0___WXLIB_BASE_p = \
-lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
@COND_MONOLITHIC_0@__WXLIB_BASE_p = $(COND_MONOLITHIC_0___WXLIB_BASE_p)
COND_MONOLITHIC_1___WXLIB_MONO_p = \
-lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
@COND_MONOLITHIC_1@__WXLIB_MONO_p = $(COND_MONOLITHIC_1___WXLIB_MONO_p)
@COND_WXUSE_ZLIB_BUILTIN@__LIB_ZLIB_p = \
@COND_WXUSE_ZLIB_BUILTIN@ -lwxzlib$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p = \
@@ -162,7 +180,7 @@ COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p = \
### Targets: ###
all: client$(EXEEXT) $(__client_bundle___depname) server$(EXEEXT) $(__server_bundle___depname)
all: $(__client___depname) $(__client_bundle___depname) $(__server___depname) $(__server_bundle___depname) baseclient$(EXEEXT) baseserver$(EXEEXT)
install: all
@@ -177,18 +195,20 @@ clean:
rm -rf client.app
rm -f server$(EXEEXT)
rm -rf server.app
rm -f baseclient$(EXEEXT)
rm -f baseserver$(EXEEXT)
distclean: clean
rm -f config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile
client$(EXEEXT): $(CLIENT_OBJECTS) $(__client___win32rc)
$(CXX) -o $@ $(CLIENT_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(LIBS) $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE)
$(__client___mac_rezcmd)
$(__client___mac_setfilecmd)
$(__client___os2_emxbindcmd)
$(SAMPLES_RPATH_POSTLINK)
@COND_USE_GUI_1@client$(EXEEXT): $(CLIENT_OBJECTS) $(__client___win32rc)
@COND_USE_GUI_1@ $(CXX) -o $@ $(CLIENT_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(LIBS) $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE)
@COND_USE_GUI_1@ $(__client___mac_rezcmd)
@COND_USE_GUI_1@ $(__client___mac_setfilecmd)
@COND_USE_GUI_1@ $(__client___os2_emxbindcmd)
@COND_USE_GUI_1@ $(SAMPLES_RPATH_POSTLINK)
client.app/Contents/PkgInfo: client$(EXEEXT) $(top_srcdir)/src/mac/carbon/Info.plist.in $(top_srcdir)/src/mac/carbon/wxmac.icns
client.app/Contents/PkgInfo: $(__client___depname) $(top_srcdir)/src/mac/carbon/Info.plist.in $(top_srcdir)/src/mac/carbon/wxmac.icns
mkdir -p client.app/Contents
mkdir -p client.app/Contents/MacOS
mkdir -p client.app/Contents/Resources
@@ -210,14 +230,14 @@ client.app/Contents/PkgInfo: client$(EXEEXT) $(top_srcdir)/src/mac/carbon/Info.p
@COND_PLATFORM_MACOSX_1@client_bundle: $(____client_BUNDLE_TGT_REF_DEP)
server$(EXEEXT): $(SERVER_OBJECTS) $(__server___win32rc)
$(CXX) -o $@ $(SERVER_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(LIBS) $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE)
$(__server___mac_rezcmd)
$(__server___mac_setfilecmd)
$(__server___os2_emxbindcmd)
$(SAMPLES_RPATH_POSTLINK)
@COND_USE_GUI_1@server$(EXEEXT): $(SERVER_OBJECTS) $(__server___win32rc)
@COND_USE_GUI_1@ $(CXX) -o $@ $(SERVER_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(LIBS) $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE)
@COND_USE_GUI_1@ $(__server___mac_rezcmd)
@COND_USE_GUI_1@ $(__server___mac_setfilecmd)
@COND_USE_GUI_1@ $(__server___os2_emxbindcmd)
@COND_USE_GUI_1@ $(SAMPLES_RPATH_POSTLINK)
server.app/Contents/PkgInfo: server$(EXEEXT) $(top_srcdir)/src/mac/carbon/Info.plist.in $(top_srcdir)/src/mac/carbon/wxmac.icns
server.app/Contents/PkgInfo: $(__server___depname) $(top_srcdir)/src/mac/carbon/Info.plist.in $(top_srcdir)/src/mac/carbon/wxmac.icns
mkdir -p server.app/Contents
mkdir -p server.app/Contents/MacOS
mkdir -p server.app/Contents/Resources
@@ -239,17 +259,35 @@ server.app/Contents/PkgInfo: server$(EXEEXT) $(top_srcdir)/src/mac/carbon/Info.p
@COND_PLATFORM_MACOSX_1@server_bundle: $(____server_BUNDLE_TGT_REF_DEP)
baseclient$(EXEEXT): $(BASECLIENT_OBJECTS)
$(CXX) -o $@ $(BASECLIENT_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(SAMPLES_RPATH_FLAG) $(LIBS) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE)
$(__baseclient___mac_setfilecmd)
$(SAMPLES_RPATH_POSTLINK)
baseserver$(EXEEXT): $(BASESERVER_OBJECTS)
$(CXX) -o $@ $(BASESERVER_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(SAMPLES_RPATH_FLAG) $(LIBS) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE)
$(__baseserver___mac_setfilecmd)
$(SAMPLES_RPATH_POSTLINK)
client_client.o: $(srcdir)/client.cpp
$(CXXC) -c -o $@ $(CLIENT_CXXFLAGS) $(srcdir)/client.cpp
client_client_rc.o: $(srcdir)/client.rc
$(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_6) $(__EXCEPTIONS_DEFINE_p_6) $(__RTTI_DEFINE_p_6) $(__THREAD_DEFINE_p_6) --include-dir $(srcdir) $(__DLLFLAG_p_6) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p_0) --include-dir $(top_srcdir)/include
$(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_7) $(__EXCEPTIONS_DEFINE_p_7) $(__RTTI_DEFINE_p_7) $(__THREAD_DEFINE_p_7) --include-dir $(srcdir) $(__DLLFLAG_p_7) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p_0) --include-dir $(top_srcdir)/include
server_server.o: $(srcdir)/server.cpp
$(CXXC) -c -o $@ $(SERVER_CXXFLAGS) $(srcdir)/server.cpp
server_server_rc.o: $(srcdir)/server.rc
$(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_6) $(__EXCEPTIONS_DEFINE_p_6) $(__RTTI_DEFINE_p_6) $(__THREAD_DEFINE_p_6) --include-dir $(srcdir) $(__DLLFLAG_p_6) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p_0) --include-dir $(top_srcdir)/include
$(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_7) $(__EXCEPTIONS_DEFINE_p_7) $(__RTTI_DEFINE_p_7) $(__THREAD_DEFINE_p_7) --include-dir $(srcdir) $(__DLLFLAG_p_7) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p_0) --include-dir $(top_srcdir)/include
baseclient_baseclient.o: $(srcdir)/baseclient.cpp
$(CXXC) -c -o $@ $(BASECLIENT_CXXFLAGS) $(srcdir)/baseclient.cpp
baseserver_baseserver.o: $(srcdir)/baseserver.cpp
$(CXXC) -c -o $@ $(BASESERVER_CXXFLAGS) $(srcdir)/baseserver.cpp
# Include dependency info, if present:

View File

@@ -0,0 +1,733 @@
/////////////////////////////////////////////////////////////////////////////
// Name: samples/sockbase/client.cpp
// Purpose: Sockets sample for wxBase
// Author: Lukasz Michalski
// Modified by:
// Created: 27.06.2005
// RCS-ID: $Id$
// Copyright: (c) 2005 Lukasz Michalski <lmichalski@sf.net>
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "wx/wx.h"
#include "wx/socket.h"
#include "wx/event.h"
#include "wx/list.h"
#include "wx/cmdline.h"
#include "wx/ffile.h"
#include "wx/datetime.h"
#include "wx/timer.h"
#include "wx/thread.h"
const wxEventType wxEVT_WORKER = wxNewEventType();
#define EVT_WORKER(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_WORKER, -1, -1, (wxObjectEventFunction) (wxEventFunction) (WorkerEventFunction) & func, (wxObject *) NULL ),
const int timeout_val = 1000;
class WorkerEvent : public wxEvent {
public:
typedef enum {
CONNECTING,
SENDING,
RECEIVING,
DISCONNECTING,
DONE
} evt_type;
WorkerEvent(void* pSender, evt_type type)
{
SetId(-1);
SetEventType(wxEVT_WORKER);
m_sender = pSender;
m_eventType = type;
m_isFailed = false;
}
void setFailed() { m_isFailed = true; }
bool isFailed() const { return m_isFailed; }
virtual wxEvent* Clone() const
{
return new WorkerEvent(*this);
}
void* m_sender;
bool m_isFailed;
wxString m_workerIdent;
evt_type m_eventType;
};
typedef void (wxEvtHandler::*WorkerEventFunction)(WorkerEvent&);
class ThreadWorker;
class EventWorker;
WX_DECLARE_LIST(ThreadWorker, TList);
WX_DECLARE_LIST(EventWorker, EList);
class Client : public wxApp {
DECLARE_EVENT_TABLE();
public:
void RemoveEventWorker(EventWorker* p_worker);
private:
typedef enum
{
THREADS,
EVENTS
} workMode;
typedef enum
{
SEND_RANDOM,
SEND_MESSAGE,
STRESS_TEST
} sendType;
workMode m_workMode;
sendType m_sendType;
wxString m_message;
wxString m_host;
long m_stressWorkers;
virtual bool OnInit();
virtual int OnRun();
virtual int OnExit();
void OnInitCmdLine(wxCmdLineParser& pParser);
bool OnCmdLineParsed(wxCmdLineParser& pParser);
void OnWorkerEvent(WorkerEvent& pEvent);
void OnTimerEvent(wxTimerEvent& pEvent);
void StartWorker(workMode pMode, const wxString& pMessage);
void StartWorker(workMode pMode);
char* CreateBuffer(int *msgsize);
void dumpStatistics();
TList m_threadWorkers;
EList m_eventWorkers;
unsigned m_statConnecting;
unsigned m_statSending;
unsigned m_statReceiving;
unsigned m_statDisconnecting;
unsigned m_statDone;
unsigned m_statFailed;
wxTimer mTimer;
};
DECLARE_APP(Client);
class ThreadWorker : public wxThread
{
public:
ThreadWorker(const wxString& p_host, char* p_buf, int p_size);
virtual ExitCode Entry();
private:
wxString m_host;
wxSocketClient* m_clientSocket;
char* m_inbuf;
char* m_outbuf;
int m_outsize;
int m_insize;
wxString m_workerIdent;
};
class EventWorker : public wxEvtHandler
{
DECLARE_EVENT_TABLE();
public:
EventWorker(const wxString& p_host, char* p_buf, int p_size);
void Run();
virtual ~EventWorker();
private:
wxString m_host;
wxSocketClient* m_clientSocket;
char* m_inbuf;
char* m_outbuf;
int m_outsize;
int m_written;
int m_insize;
int m_readed;
WorkerEvent::evt_type m_currentType;
bool m_doneSent;
wxIPV4address m_localaddr;
void OnSocketEvent(wxSocketEvent& pEvent);
void SendEvent(bool failed);
};
/******************* Implementation ******************/
IMPLEMENT_APP_CONSOLE(Client);
#include <wx/listimpl.cpp>
WX_DEFINE_LIST(TList);
WX_DEFINE_LIST(EList);
wxString
CreateIdent(const wxIPV4address& addr)
{
return wxString::Format(wxT("%s:%d"),addr.IPAddress().c_str(),addr.Service());
}
void
Client::OnInitCmdLine(wxCmdLineParser& pParser)
{
wxApp::OnInitCmdLine(pParser);
pParser.AddSwitch(wxT("e"),wxT("event"),_("Use event based worker (default)"),wxCMD_LINE_PARAM_OPTIONAL);
pParser.AddSwitch(wxT("t"),wxT("thread"),_("Use thread based worker"),wxCMD_LINE_PARAM_OPTIONAL);
pParser.AddSwitch(wxT("r"),wxT("random"),_("Send radnom data (default)"),wxCMD_LINE_PARAM_OPTIONAL);
pParser.AddOption(wxT("m"),wxT("message"),_("Send message from <str>"),wxCMD_LINE_VAL_STRING,wxCMD_LINE_PARAM_OPTIONAL);
pParser.AddOption(wxT("f"),wxT("file"),_("Send contents of <file>"),wxCMD_LINE_VAL_STRING,wxCMD_LINE_PARAM_OPTIONAL);
pParser.AddOption(wxT("H"),wxT("hostname"),_("IP or name of host to connect to"),wxCMD_LINE_VAL_STRING,wxCMD_LINE_PARAM_OPTIONAL);
pParser.AddOption(wxT("s"),wxT("stress"),_("stress test with <num> concurrent connections"),wxCMD_LINE_VAL_NUMBER,wxCMD_LINE_PARAM_OPTIONAL);
}
bool
Client::OnCmdLineParsed(wxCmdLineParser& pParser)
{
wxString fname;
m_workMode = EVENTS;
m_stressWorkers = 50;
if (pParser.Found(_("verbose")))
{
wxLog::AddTraceMask(wxT("wxSocket"));
wxLog::AddTraceMask(wxT("epolldispatcher"));
wxLog::AddTraceMask(wxT("selectdispatcher"));
wxLog::AddTraceMask(wxT("thread"));
wxLog::AddTraceMask(wxT("events"));
}
if (pParser.Found(wxT("t")))
m_workMode = THREADS;
m_sendType = SEND_RANDOM;
if (pParser.Found(wxT("m"),&m_message))
m_sendType = SEND_MESSAGE;
else if (pParser.Found(wxT("f"),&fname))
{
wxFFile file(fname);
if (!file.IsOpened()) {
wxLogError(wxT("Cannot open file %s"),fname.c_str());
return false;
};
if (!file.ReadAll(&m_message)) {
wxLogError(wxT("Cannot read conten of file %s"),fname.c_str());
return false;
};
m_sendType = SEND_MESSAGE;
};
if (pParser.Found(wxT("s"),&m_stressWorkers))
m_sendType = STRESS_TEST;
m_host = wxT("127.0.0.1");
pParser.Found(wxT("H"),&m_host);
return wxApp::OnCmdLineParsed(pParser);
};
bool
Client::OnInit()
{
if (!wxApp::OnInit())
return false;
srand(wxDateTime::Now().GetTicks());
mTimer.SetOwner(this);
m_statConnecting = 0;
m_statSending = 0;
m_statReceiving = 0;
m_statDisconnecting = 0;
m_statDone = 0;
m_statFailed = 0;
return true;
}
int
Client::OnRun()
{
switch(m_sendType)
{
case STRESS_TEST:
switch(m_workMode)
{
case THREADS:
for (int i = 0; i < m_stressWorkers; i++) {
if (m_message.empty())
StartWorker(THREADS);
else
StartWorker(THREADS, m_message);
}
break;
case EVENTS:
for (int i = 0; i < m_stressWorkers; i++) {
if (m_message.empty())
StartWorker(EVENTS);
else
StartWorker(EVENTS, m_message);
}
break;
default:
for (int i = 0; i < m_stressWorkers; i++) {
if (m_message.empty())
StartWorker(i % 5 == 0 ? THREADS : EVENTS);
else
StartWorker(i % 5 == 0 ? THREADS : EVENTS, m_message);
}
break;
}
break;
case SEND_MESSAGE:
StartWorker(m_workMode,m_message);
break;
case SEND_RANDOM:
StartWorker(m_workMode);
break;
}
mTimer.Start(timeout_val,true);
return wxApp::OnRun();
}
int
Client::OnExit()
{
for(EList::compatibility_iterator it = m_eventWorkers.GetFirst(); it ; it->GetNext()) {
delete it->GetData();
}
return 0;
}
// Create buffer to be sent by client. Buffer contains test indicator
// message size and place for data
// msgsize parameter contains size of data in bytes and
// if input value does not fit into 250 bytes then
// on exit is updated to new value that is multiply of 1024 bytes
char*
Client::CreateBuffer(int* msgsize)
{
int bufsize = 0;
char* buf;
//if message should have more than 256 bytes then set it as
//test3 for compatibility with GUI server sample
if ((*msgsize) > 250)
{
//send at least one kb of data
int size = (*msgsize)/1024 + 1;
//returned buffer will contain test indicator, message size in kb and data
bufsize = size*1024+2;
buf = new char[bufsize];
buf[0] = 0xDE; //second byte contains size in kilobytes
buf[1] = (char)(size);
*msgsize = size*1024;
}
else
{
//returned buffer will contain test indicator, message size in kb and data
bufsize = (*msgsize)+2;
buf = new char[bufsize];
buf[0] = 0xBE; //second byte contains size in bytes
buf[1] = (char)(*msgsize);
}
return buf;
}
void
Client::StartWorker(workMode pMode) {
int msgsize = 1 + (int) (250000.0 * (rand() / (RAND_MAX + 1.0)));
char* buf = CreateBuffer(&msgsize);
//fill data part of buffer with random bytes
for (int i = 2; i < (msgsize); i++) {
buf[i] = i % 256;
}
if (pMode == THREADS) {
ThreadWorker* c = new ThreadWorker(m_host,buf,msgsize+2);
if (c->Create() != wxTHREAD_NO_ERROR) {
wxLogError(wxT("Cannot create more threads"));
} else {
c->Run();
m_threadWorkers.Append(c);
}
} else {
EventWorker* e = new EventWorker(m_host,buf,msgsize+2);
e->Run();
m_eventWorkers.Append(e);
}
m_statConnecting++;
}
void
Client::StartWorker(workMode pMode, const wxString& pMessage) {
char* tmpbuf = strdup(pMessage.mb_str());
int msgsize = strlen(tmpbuf);
char* buf = CreateBuffer(&msgsize);
memset(buf+2,0x0,msgsize);
memcpy(buf+2,tmpbuf,msgsize);
free(tmpbuf);
if (pMode == THREADS) {
ThreadWorker* c = new ThreadWorker(m_host,buf,msgsize+2);
if (c->Create() != wxTHREAD_NO_ERROR) {
wxLogError(wxT("Cannot create more threads"));
} else {
c->Run();
m_threadWorkers.Append(c);
}
} else {
EventWorker* e = new EventWorker(m_host,buf,msgsize+2);
e->Run();
m_eventWorkers.Append(e);
}
m_statConnecting++;
}
void
Client::OnWorkerEvent(WorkerEvent& pEvent) {
switch (pEvent.m_eventType) {
case WorkerEvent::CONNECTING:
if (pEvent.isFailed())
{
m_statConnecting--;
m_statFailed++;
}
break;
case WorkerEvent::SENDING:
if (pEvent.isFailed())
{
m_statFailed++;
m_statSending--;
}
else
{
m_statConnecting--;
m_statSending++;
}
break;
case WorkerEvent::RECEIVING:
if (pEvent.isFailed())
{
m_statReceiving--;
m_statFailed++;
}
else
{
m_statSending--;
m_statReceiving++;
}
break;
case WorkerEvent::DISCONNECTING:
if (pEvent.isFailed())
{
m_statDisconnecting--;
m_statFailed++;
}
else
{
m_statReceiving--;
m_statDisconnecting++;
}
break;
case WorkerEvent::DONE:
m_statDone++;
m_statDisconnecting--;
break;
};
if (pEvent.isFailed() || pEvent.m_eventType == WorkerEvent::DONE)
{
for(TList::compatibility_iterator it = m_threadWorkers.GetFirst(); it ; it = it->GetNext()) {
if (it->GetData() == pEvent.m_sender) {
m_threadWorkers.DeleteNode(it);
break;
}
}
for(EList::compatibility_iterator it = m_eventWorkers.GetFirst(); it ; it = it->GetNext())
{
if (it->GetData() == pEvent.m_sender) {
delete it->GetData();
m_eventWorkers.DeleteNode(it);
break;
}
}
if ((m_threadWorkers.GetCount() == 0) && (m_eventWorkers.GetCount() == 0))
{
mTimer.Stop();
dumpStatistics();
wxSleep(2);
ExitMainLoop();
}
else
{
mTimer.Start(timeout_val,true);
}
}
}
void
Client::RemoveEventWorker(EventWorker* p_worker) {
for(EList::compatibility_iterator it = m_eventWorkers.GetFirst(); it ; it = it->GetNext()) {
if (it->GetData() == p_worker) {
//wxLogDebug(wxT("Deleting event worker"));
delete it->GetData();
m_eventWorkers.DeleteNode(it);
return;
}
}
}
void
Client::dumpStatistics() {
wxString msg(
wxString::Format(_("Connecting:\t%d\nSending\t\t%d\nReceiving\t%d\nDisconnecting:\t%d\nDone:\t\t%d\nFailed:\t\t%d\n"),
m_statConnecting,
m_statSending,
m_statReceiving,
m_statDisconnecting,
m_statDone,
m_statFailed
));
wxLogMessage(wxT("Current status:\n%s\n"),msg.c_str());
}
void
Client::OnTimerEvent(wxTimerEvent&) {
dumpStatistics();
}
BEGIN_EVENT_TABLE(Client,wxEvtHandler)
EVT_WORKER(Client::OnWorkerEvent)
EVT_TIMER(wxID_ANY,Client::OnTimerEvent)
END_EVENT_TABLE()
EventWorker::EventWorker(const wxString& p_host, char* p_buf, int p_size)
: m_host(p_host),
m_outbuf(p_buf),
m_outsize(p_size),
m_written(0),
m_readed(0)
{
m_clientSocket = new wxSocketClient(wxSOCKET_NOWAIT);
m_clientSocket->SetEventHandler(*this);
m_insize = m_outsize - 2;
m_inbuf = new char[m_insize];
}
void
EventWorker::Run() {
wxIPV4address ca;
ca.Hostname(m_host);
ca.Service(3000);
m_clientSocket->SetNotify(wxSOCKET_CONNECTION_FLAG|wxSOCKET_LOST_FLAG|wxSOCKET_OUTPUT_FLAG|wxSOCKET_INPUT_FLAG);
m_clientSocket->Notify(true);
m_currentType = WorkerEvent::CONNECTING;
m_doneSent = false;
//wxLogMessage(wxT("EventWorker: Connecting....."));
m_clientSocket->Connect(ca,false);
}
void
EventWorker::OnSocketEvent(wxSocketEvent& pEvent) {
switch(pEvent.GetSocketEvent()) {
case wxSOCKET_INPUT:
//wxLogDebug(wxT("EventWorker: INPUT"));
do {
if (m_readed == m_insize)
return; //event already posted
m_clientSocket->Read(m_inbuf + m_readed, m_insize - m_readed);
if (m_clientSocket->Error())
{
if (m_clientSocket->LastError() != wxSOCKET_WOULDBLOCK)
{
wxLogError(wxT("%s: read error"),CreateIdent(m_localaddr).c_str());
SendEvent(true);
}
}
m_readed += m_clientSocket->LastCount();
//wxLogDebug(wxT("EventWorker: readed %d bytes, %d bytes to do"),m_clientSocket->LastCount(), m_insize - m_readed);
if (m_readed == m_insize)
{
if (!memcmp(m_inbuf,m_outbuf,m_insize)) {
wxLogError(wxT("%s: data mismatch"),CreateIdent(m_localaddr).c_str());
SendEvent(true);
}
m_currentType = WorkerEvent::DISCONNECTING;
wxLogDebug(wxT("%s: DISCONNECTING"),CreateIdent(m_localaddr).c_str());
SendEvent(false);
//wxLogDebug(wxT("EventWorker %p closing"),this);
m_clientSocket->Close();
m_currentType = WorkerEvent::DONE;
wxLogDebug(wxT("%s: DONE"),CreateIdent(m_localaddr).c_str());
SendEvent(false);
}
} while (!m_clientSocket->Error());
break;
case wxSOCKET_OUTPUT:
//wxLogDebug(wxT("EventWorker: OUTPUT"));
do {
if (m_written == m_outsize)
return;
if (m_written == 0)
{
m_currentType = WorkerEvent::SENDING;
wxLogDebug(wxT("%s: SENDING"),CreateIdent(m_localaddr).c_str());
}
m_clientSocket->Write(m_outbuf + m_written, m_outsize - m_written);
if (m_clientSocket->Error())
{
if (m_clientSocket->LastError() != wxSOCKET_WOULDBLOCK) {
wxLogError(wxT("%s: Write error"),CreateIdent(m_localaddr).c_str());
SendEvent(true);
}
}
m_written += m_clientSocket->LastCount();
if (m_written != m_outsize)
{
//wxLogDebug(wxT("EventWorker: written %d bytes, %d bytes to do"),m_clientSocket->LastCount(),m_outsize - m_written);
}
else
{
//wxLogDebug(wxT("EventWorker %p SENDING->RECEIVING"),this);
m_currentType = WorkerEvent::RECEIVING;
wxLogDebug(wxT("%s: RECEIVING"),CreateIdent(m_localaddr).c_str());
SendEvent(false);
}
} while(!m_clientSocket->Error());
break;
case wxSOCKET_CONNECTION:
{
//wxLogMessage(wxT("EventWorker: got connection"));
wxLogMessage(wxT("%s: starting writing message (2 bytes for signature and %d bytes of data to write)"),CreateIdent(m_localaddr).c_str(),m_outsize-2);
if (!m_clientSocket->GetLocal(m_localaddr))
wxLogError(_("Cannot get peer data for socket %p"),m_clientSocket);
m_currentType = WorkerEvent::SENDING;
wxLogDebug(wxT("%s: CONNECTING"),CreateIdent(m_localaddr).c_str());
SendEvent(false);
}
break;
case wxSOCKET_LOST:
{
wxLogError(_("%s: connection lost"),CreateIdent(m_localaddr).c_str());
SendEvent(true);
}
break;
}
}
void
EventWorker::SendEvent(bool failed) {
if (m_doneSent)
return;
WorkerEvent e(this,m_currentType);
if (failed) e.setFailed();
wxGetApp().AddPendingEvent(e);
m_doneSent = failed || m_currentType == WorkerEvent::DONE;
};
EventWorker::~EventWorker() {
m_clientSocket->Destroy();
delete [] m_outbuf;
delete [] m_inbuf;
}
BEGIN_EVENT_TABLE(EventWorker,wxEvtHandler)
EVT_SOCKET(wxID_ANY,EventWorker::OnSocketEvent)
END_EVENT_TABLE()
ThreadWorker::ThreadWorker(const wxString& p_host, char* p_buf, int p_size)
: wxThread(wxTHREAD_DETACHED),
m_host(p_host),
m_outbuf(p_buf),
m_outsize(p_size)
{
m_clientSocket = new wxSocketClient(wxSOCKET_BLOCK|wxSOCKET_WAITALL);
m_insize = m_outsize - 2;
m_inbuf = new char[m_insize];
}
wxThread::ExitCode ThreadWorker::Entry()
{
wxIPV4address ca;
ca.Hostname(m_host);
ca.Service(5678);
//wxLogDebug(wxT("ThreadWorker: Connecting....."));
m_clientSocket->SetTimeout(60);
bool failed = false;
WorkerEvent::evt_type etype = WorkerEvent::CONNECTING;
if (!m_clientSocket->Connect(ca)) {
wxLogError(wxT("Cannot connect to %s:%d"),ca.IPAddress().c_str(), ca.Service());
failed = true;
} else {
//wxLogMessage(wxT("ThreadWorker: Connected. Sending %d bytes of data"),m_outsize);
etype = WorkerEvent::SENDING;
WorkerEvent e(this,etype);
wxGetApp().AddPendingEvent(e);
int to_process = m_outsize;
do {
m_clientSocket->Write(m_outbuf,m_outsize);
if (m_clientSocket->Error()) {
wxLogError(wxT("ThreadWorker: Write error"));
failed = true;
}
to_process -= m_clientSocket->LastCount();
//wxLogDebug(wxT("EventWorker: written %d bytes, %d bytes to do"),m_clientSocket->LastCount(),to_process);
} while(!m_clientSocket->Error() && to_process != 0);
if (!failed) {
etype = WorkerEvent::RECEIVING;
WorkerEvent e(this,etype);
wxGetApp().AddPendingEvent(e);
to_process = m_insize;
do {
m_clientSocket->Read(m_inbuf,m_insize);
if (m_clientSocket->Error()) {
wxLogError(wxT("ThreadWorker: Read error"));
failed = true;
break;
}
to_process -= m_clientSocket->LastCount();
//wxLogDebug(wxT("EventWorker: readed %d bytes, %d bytes to do"),m_clientSocket->LastCount(),to_process);
} while(!m_clientSocket->Error() && to_process != 0);
}
char* outdat = (char*)m_outbuf+2;
if (!failed && (memcmp(m_inbuf,outdat,m_insize) != 0))
{
wxLogError(wxT("Data mismatch"));
failed = true;
}
}
//wxLogDebug(wxT("ThreadWorker: Finished"));
if (!failed) {
etype = WorkerEvent::DISCONNECTING;
WorkerEvent e(this,etype);
wxGetApp().AddPendingEvent(e);
};
m_clientSocket->Close();
m_clientSocket->Destroy();
m_clientSocket = NULL;
delete [] m_outbuf;
delete [] m_inbuf;
if (!failed)
etype = WorkerEvent::DONE;
WorkerEvent e(this,etype);
if (failed) e.setFailed();
wxGetApp().AddPendingEvent(e);
return 0;
}

View File

@@ -0,0 +1,738 @@
/////////////////////////////////////////////////////////////////////////////
// Name: samples/sockbase/client.cpp
// Purpose: Sockets sample for wxBase
// Author: Lukasz Michalski
// Modified by:
// Created: 27.06.2005
// RCS-ID: $Id$
// Copyright: (c) 2005 Lukasz Michalski <lmichalski@user.sourceforge.net>
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "wx/wx.h"
#include "wx/socket.h"
#include "wx/event.h"
#include "wx/list.h"
#include "wx/cmdline.h"
#include "wx/datetime.h"
#include "wx/timer.h"
#include "wx/thread.h"
wxChar* GetSocketErrorMsg(int pSockError)
{
switch(pSockError)
{
case wxSOCKET_NOERROR:
return wxT("wxSOCKET_NOERROR");
break;
case wxSOCKET_INVOP:
return wxT("wxSOCKET_INVOP");
break;
case wxSOCKET_IOERR:
return wxT("wxSOCKET_IOERR");
break;
case wxSOCKET_INVADDR:
return wxT("wxSOCKET_INVADDR");
break;
case wxSOCKET_NOHOST:
return wxT("wxSOCKET_NOHOST");
break;
case wxSOCKET_INVPORT:
return wxT("wxSOCKET_INVPORT");
break;
case wxSOCKET_WOULDBLOCK:
return wxT("wxSOCKET_WOULDBLOCK");
break;
case wxSOCKET_TIMEDOUT:
return wxT("wxSOCKET_TIMEDOUT");
break;
case wxSOCKET_MEMERR:
return wxT("wxSOCKET_MEMERR");
break;
default:
return wxT("Unknown");
break;
}
}
//log output types for LogWorker helper function
typedef enum
{
LOG_MESSAGE,
LOG_ERROR,
LOG_VERBOSE
} logWorker_t;
//outputs log message with IP and TCP port number prepended
void
LogWorker(const wxIPV4address& pAddr, const wxString& pMessage, logWorker_t pType = LOG_VERBOSE)
{
wxString msg(wxString::Format(wxT("%s:%d "),pAddr.IPAddress().c_str(),pAddr.Service()));
msg += pMessage;
switch (pType)
{
case LOG_VERBOSE:
wxLogVerbose(msg);
break;
case LOG_MESSAGE:
wxLogMessage(msg);
break;
case LOG_ERROR:
wxLogError(msg);
break;
}
}
//event sent by workers to server class
//after client is served
const wxEventType wxEVT_WORKER = wxNewEventType();
#define EVT_WORKER(func) DECLARE_EVENT_TABLE_ENTRY( wxEVT_WORKER, -1, -1, (wxObjectEventFunction) (wxEventFunction) (WorkerEventFunction) & func, (wxObject *) NULL ),
class WorkerEvent : public wxEvent {
public:
WorkerEvent(void* pSender)
{
SetId(-1);
SetEventType(wxEVT_WORKER);
m_sender = pSender;
m_exit = false;
m_workerFailed = false;
}
virtual wxEvent* Clone() const
{
return new WorkerEvent(*this);
}
void* m_sender;
bool m_exit;
bool m_workerFailed;
};
typedef void (wxEvtHandler::*WorkerEventFunction)(WorkerEvent&);
class ThreadWorker;
class EventWorker;
WX_DECLARE_LIST(ThreadWorker, TList);
WX_DECLARE_LIST(EventWorker, EList);
//main server class contains listening socket
//and list of two type worker classes that serve clients
class Server : public wxApp
{
DECLARE_EVENT_TABLE();
public:
Server() : m_maxConnections(-1) {}
~Server() {}
private:
enum WorkMode
{
MIXED,
THREADS,
EVENTS
};
virtual bool OnInit();
virtual int OnExit();
void OnInitCmdLine(wxCmdLineParser& pParser);
bool OnCmdLineParsed(wxCmdLineParser& pParser);
void OnSocketEvent(wxSocketEvent& pEvent);
void OnWorkerEvent(WorkerEvent& pEvent);
void OnTimerEvent(wxTimerEvent& pEvent);
void DumpStatistics();
TList m_threadWorkers;
EList m_eventWorkers;
WorkMode m_workMode;
wxSocketServer* m_listeningSocket;
// statistics
unsigned m_threadWorkersCreated;
unsigned m_threadWorkersDone;
unsigned m_threadWorkersFailed;
unsigned m_maxThreadWorkers;
unsigned m_eventWorkersCreated;
unsigned m_eventWorkersDone;
unsigned m_eventWorkersFailed;
unsigned m_maxEventWorkers;
long int m_maxConnections;
long m_port;
wxTimer mTimer;
};
DECLARE_APP(Server);
//thread based worker reads signature and all data first from connected client
//and resends data to client after reading
class ThreadWorker : public wxThread
{
public:
ThreadWorker(wxSocketBase* pSocket);
virtual ExitCode Entry();
private:
wxSocketBase* m_socket;
wxIPV4address m_peer;
};
//event based worker reads signature and creates buffer for incoming data.
//When part of data arrives this worker resends it as soon as possible.
class EventWorker : public wxEvtHandler
{
DECLARE_EVENT_TABLE();
public:
EventWorker(wxSocketBase* pSock);
~EventWorker();
private:
wxSocketBase* m_socket;
wxIPV4address m_peer;
unsigned char m_signature[2];
char* m_inbuf;
int m_infill;
int m_size;
char* m_outbuf;
int m_outfill;
int m_written;
void OnSocketEvent(wxSocketEvent& pEvent);
void DoWrite();
void DoRead();
};
/******************* Implementation ******************/
IMPLEMENT_APP_CONSOLE(Server)
#include <wx/listimpl.cpp>
WX_DEFINE_LIST(TList);
WX_DEFINE_LIST(EList);
void
Server::OnInitCmdLine(wxCmdLineParser& pParser)
{
wxApp::OnInitCmdLine(pParser);
pParser.AddSwitch(wxT("t"),wxT("threads"),_("Use thread based workers only"));
pParser.AddSwitch(wxT("e"),wxT("events"),_("Use event based workers only"));
pParser.AddOption(wxT("m"),wxT("max"),_("Exit after <n> connections"),wxCMD_LINE_VAL_NUMBER,wxCMD_LINE_PARAM_OPTIONAL);
pParser.AddOption(wxT("p"),wxT("port"),_("listen on given port (default 3000)"),wxCMD_LINE_VAL_NUMBER,wxCMD_LINE_PARAM_OPTIONAL);
}
void
Server::DumpStatistics()
{
wxString mode;
switch(m_workMode)
{
case EVENTS:
mode = _("Event based workers");
break;
case THREADS:
mode = _("Thread based workers");
break;
case MIXED:
mode = _("Event and thread based workers");
break;
}
wxLogMessage(wxString::Format(wxT("Server mode: %s"),mode.c_str()));
wxLogMessage(wxString::Format(wxT("\t\t\t\tThreads\tEvents\tTotal")));
wxLogMessage(wxString::Format(wxT("Workers created:\t\t%d\t%d\t%d"),m_threadWorkersCreated,m_eventWorkersCreated,m_threadWorkersCreated+m_eventWorkersCreated));
wxLogMessage(wxString::Format(wxT("Max concurrent workers:\t%d\t%d\t%d"),m_maxThreadWorkers,m_maxEventWorkers,m_maxThreadWorkers+m_maxEventWorkers));
wxLogMessage(wxString::Format(wxT("Workers failed:\t\t%d\t%d\t%d"),m_threadWorkersFailed,m_eventWorkersFailed,m_threadWorkersFailed+m_eventWorkersFailed));
wxLogMessage(wxString::Format(wxT("Workers done:\t\t%d\t%d\t%d"),m_threadWorkersDone,m_eventWorkersDone,m_threadWorkersDone+m_eventWorkersDone));
if ((int)(m_threadWorkersDone+m_eventWorkersDone) == m_maxConnections)
{
wxLogMessage(wxT("%d connection(s) served, exiting"),m_maxConnections);
ExitMainLoop();
}
}
bool
Server::OnCmdLineParsed(wxCmdLineParser& pParser)
{
if (pParser.Found(_("verbose")))
{
wxLog::AddTraceMask(wxT("wxSocket"));
wxLog::AddTraceMask(wxT("epolldispatcher"));
wxLog::AddTraceMask(wxT("selectdispatcher"));
wxLog::AddTraceMask(wxT("thread"));
wxLog::AddTraceMask(wxT("events"));
wxLog::AddTraceMask(wxT("timer"));
}
if (pParser.Found(wxT("m"),&m_maxConnections))
{
wxLogMessage(wxT("%d connection(s) to exit"),m_maxConnections);
}
if (pParser.Found(wxT("p"),&m_port))
{
wxLogMessage(wxT("%d connection(s) to exit"),m_maxConnections);
}
if (pParser.Found(wxT("t")))
m_workMode = THREADS;
else if (pParser.Found(wxT("e")))
m_workMode = EVENTS;
else
m_workMode = MIXED;
return wxApp::OnCmdLineParsed(pParser);
}
bool Server::OnInit()
{
wxLog* logger = new wxLogStderr();
wxLog::SetActiveTarget(logger);
m_port = 3000;
//send interesting things to console
if (!wxApp::OnInit())
return false;
//setup listening socket
wxIPV4address la;
la.Service(m_port);
m_listeningSocket = new wxSocketServer(la,wxSOCKET_NOWAIT|wxSOCKET_REUSEADDR);
m_listeningSocket->SetEventHandler(*this);
m_listeningSocket->SetNotify(wxSOCKET_CONNECTION_FLAG);
m_listeningSocket->Notify(true);
if (!m_listeningSocket->Ok())
{
wxLogError(wxT("Cannot bind listening socket"));
return false;
}
m_threadWorkersCreated = 0;
m_threadWorkersDone = 0;
m_threadWorkersFailed = 0;
m_maxThreadWorkers = 0;
m_eventWorkersCreated = 0;
m_eventWorkersDone = 0;
m_eventWorkersFailed = 0;
m_maxEventWorkers = 0;
wxLogMessage(wxT("Server listening at port %d, waiting for connections"), m_port);
return true;
}
int Server::OnExit()
{
for(TList::compatibility_iterator it = m_threadWorkers.GetFirst(); it ; it = it->GetNext()) {
it->GetData()->Wait();
delete it->GetData();
}
for(EList::compatibility_iterator it = m_eventWorkers.GetFirst(); it ; it->GetNext()) {
delete it->GetData();
}
m_threadWorkers.Clear();
m_eventWorkers.Clear();
m_listeningSocket->Destroy();
return 0;
}
void Server::OnSocketEvent(wxSocketEvent& pEvent)
{
switch(pEvent.GetSocketEvent())
{
case wxSOCKET_INPUT:
wxLogError(wxT("Unexpected wxSOCKET_INPUT in wxSocketServer"));
break;
case wxSOCKET_OUTPUT:
wxLogError(wxT("Unexpected wxSOCKET_OUTPUT in wxSocketServer"));
break;
case wxSOCKET_CONNECTION:
{
wxSocketBase* sock = m_listeningSocket->Accept();
wxIPV4address addr;
if (!sock->GetPeer(addr))
{
wxLogError(wxT("Server: cannot get peer info"));
} else {
wxLogMessage(wxT("Got connection from %s:%d"),addr.IPAddress().c_str(), addr.Service());
}
bool createThread;
if (m_workMode != MIXED)
createThread = m_workMode == THREADS;
else
createThread = (wxDateTime::Now().GetSecond())%2 == 0;
if (createThread)
{
ThreadWorker* c = new ThreadWorker(sock);
if (c->Create() == wxTHREAD_NO_ERROR)
{
m_threadWorkers.Append(c);
if (m_threadWorkers.GetCount() > m_maxThreadWorkers)
m_maxThreadWorkers++;
m_threadWorkersCreated++;
c->Run();
}
else
{
wxLogError(wxT("Server: cannot create next thread (current threads: %d"), m_threadWorkers.size());
};
}
else
{
EventWorker* w = new EventWorker(sock);
m_eventWorkers.Append(w);
if (m_eventWorkers.GetCount() > m_maxEventWorkers)
m_maxEventWorkers++;
m_eventWorkersCreated++;
}
}
break;
case wxSOCKET_LOST:
wxLogError(wxT("Unexpected wxSOCKET_LOST in wxSocketServer"));
break;
}
}
void Server::OnWorkerEvent(WorkerEvent& pEvent)
{
//wxLogMessage(wxT("Got worker event"));
for(TList::compatibility_iterator it = m_threadWorkers.GetFirst(); it ; it = it->GetNext())
{
if (it->GetData() == pEvent.m_sender)
{
wxLogVerbose(wxT("Deleting thread worker (%d left)"),m_threadWorkers.GetCount());
it->GetData()->Wait();
delete it->GetData();
m_threadWorkers.DeleteNode(it);
if (!pEvent.m_workerFailed)
m_threadWorkersDone++;
else
m_threadWorkersFailed++;
break;
}
}
for(EList::compatibility_iterator it = m_eventWorkers.GetFirst(); it ; it = it->GetNext())
{
if (it->GetData() == pEvent.m_sender)
{
wxLogVerbose(wxT("Deleting event worker (%d left)"),m_eventWorkers.GetCount());
delete it->GetData();
m_eventWorkers.DeleteNode(it);
if (!pEvent.m_workerFailed)
m_eventWorkersDone++;
else
m_eventWorkersFailed++;
break;
}
}
if (m_eventWorkers.GetCount() == 0 && m_threadWorkers.GetCount() == 0)
{
mTimer.Start(1000,true);
}
}
void Server::OnTimerEvent(wxTimerEvent&)
{
DumpStatistics();
}
BEGIN_EVENT_TABLE(Server,wxEvtHandler)
EVT_SOCKET(wxID_ANY,Server::OnSocketEvent)
EVT_WORKER(Server::OnWorkerEvent)
EVT_TIMER(wxID_ANY,Server::OnTimerEvent)
END_EVENT_TABLE()
ThreadWorker::ThreadWorker(wxSocketBase* pSocket) : wxThread(wxTHREAD_JOINABLE)
{
m_socket = pSocket;
//Notify() cannot be called in thread context. We have to detach from main loop
//before switching thread contexts.
m_socket->Notify(false);
m_socket->SetFlags(wxSOCKET_WAITALL|wxSOCKET_BLOCK);
pSocket->GetPeer(m_peer);
}
wxThread::ExitCode ThreadWorker::Entry()
{
WorkerEvent e(this);
if (!m_socket->IsConnected())
{
LogWorker(m_peer,wxT("ThreadWorker: not connected"),LOG_ERROR);
return 0;
}
int to_process = -1;
if (m_socket->IsConnected())
{
unsigned char signature[2];
LogWorker(m_peer,wxT("ThreadWorker: reading for data"));
to_process = 2;
do
{
m_socket->Read(&signature,to_process);
if (m_socket->Error())
{
LogWorker(m_peer,wxT("ThreadWorker: Read error"),LOG_ERROR);
wxGetApp().AddPendingEvent(e);
return 0;
}
to_process -= m_socket->LastCount();
LogWorker(m_peer,wxString::Format(wxT("to_process: %d"),to_process));
}
while (!m_socket->Error() && to_process != 0);
if (signature[0] == 0)
{
e.m_exit = true;
return 0;
}
if (signature[0] == 0xCE)
{
LogWorker(m_peer,_("This server does not support test2 from GUI client"));
e.m_workerFailed = true;
e.m_exit = true;
return 0;
}
int size = signature[1] * (signature[0] == 0xBE ? 1 : 1024);
char* buf = new char[size];
LogWorker(m_peer,wxString::Format(wxT("Message signature: chunks: %d, kilobytes: %d, size: %d (bytes)"),signature[0],signature[1],size));
to_process = size;
LogWorker(m_peer,wxString::Format(wxT("ThreadWorker: reading %d bytes of data"),to_process));
do
{
m_socket->Read(buf,to_process);
if (m_socket->Error())
{
LogWorker(m_peer,wxT("ThreadWorker: Read error"),LOG_ERROR);
wxGetApp().AddPendingEvent(e);
return 0;
}
to_process -= m_socket->LastCount();
LogWorker(m_peer,wxString::Format(wxT("ThreadWorker: %d bytes readed, %d todo"),m_socket->LastCount(),to_process));
}
while(!m_socket->Error() && to_process != 0);
to_process = size;
do
{
m_socket->Write(buf,to_process);
if (m_socket->Error()) {
LogWorker(m_peer,wxT("ThreadWorker: Write error"),LOG_ERROR);
break;
}
to_process -= m_socket->LastCount();
LogWorker(m_peer,wxString::Format(wxT("ThreadWorker: %d bytes written, %d todo"),m_socket->LastCount(),to_process));
}
while(!m_socket->Error() && to_process != 0);
}
LogWorker(m_peer,wxT("ThreadWorker: done"));
e.m_workerFailed = to_process != 0;
m_socket->Destroy();
wxGetApp().AddPendingEvent(e);
return 0;
}
EventWorker::EventWorker(wxSocketBase* pSock)
: m_socket(pSock),
m_inbuf(NULL),
m_infill(0),
m_outbuf(NULL),
m_outfill(0)
{
m_socket->SetNotify(wxSOCKET_LOST_FLAG|wxSOCKET_INPUT_FLAG|wxSOCKET_OUTPUT_FLAG);
m_socket->Notify(true);
m_socket->SetEventHandler(*this);
m_socket->SetFlags(wxSOCKET_NOWAIT);
m_socket->GetPeer(m_peer);
}
EventWorker::~EventWorker() {
m_socket->Destroy();
delete [] m_inbuf;
delete [] m_outbuf;
}
void
EventWorker::DoRead()
{
if (m_inbuf == NULL)
{
//read message header
do
{
m_socket->Read(m_signature,2 - m_infill);
if (m_socket->Error()) {
if (m_socket->LastError() != wxSOCKET_WOULDBLOCK)
{
LogWorker(m_peer,wxString::Format(wxT("Read error (%d): %s"),m_socket->LastError(),GetSocketErrorMsg(m_socket->LastError())),LOG_ERROR);
m_socket->Close();
}
}
else
{
m_infill += m_socket->LastCount();
if (m_infill == 2) {
unsigned char chunks = m_signature[1];
unsigned char type = m_signature[0];
if (type == 0xCE)
{
LogWorker(m_peer,_("This server does not support test2 from GUI client"));
m_written = -1; //wxSOCKET_LOST will interpret this as failure
m_socket->Close();
}
else if (type == 0xBE || type == 0xDE)
{
m_size = chunks * (type == 0xBE ? 1 : 1024);
m_inbuf = new char[m_size];
m_outbuf = new char[m_size];
m_infill = 0;
m_outfill = 0;
m_written = 0;
LogWorker(m_peer,wxString::Format(wxT("Message signature: len: %d, type: %s, size: %d (bytes)"),chunks,type == 0xBE ? wxT("b") : wxT("kB"),m_size));
break;
} else
{
LogWorker(m_peer,wxString::Format(wxT("Unknown test type %x"),type));
m_socket->Close();
}
}
}
}
while(!m_socket->Error() && (2 - m_infill != 0));
}
if (m_inbuf == NULL)
return;
//read message data
do {
if (m_size == m_infill) {
m_signature[0] = m_signature[1] = 0x0;
delete [] m_inbuf;
m_inbuf = NULL;
m_infill = 0;
return;
}
m_socket->Read(m_inbuf + m_infill,m_size - m_infill);
if (m_socket->Error()) {
if (m_socket->LastError() != wxSOCKET_WOULDBLOCK)
{
LogWorker(
m_peer,
wxString::Format(wxT("Read error (%d): %s"),
m_socket->LastError(),
GetSocketErrorMsg(m_socket->LastError())
),
LOG_ERROR);
m_socket->Close();
}
}
else
{
memcpy(m_outbuf+m_outfill,m_inbuf+m_infill,m_socket->LastCount());
m_infill += m_socket->LastCount();
m_outfill += m_socket->LastCount();
DoWrite();
}
}
while(!m_socket->Error());
};
void EventWorker::OnSocketEvent(wxSocketEvent& pEvent)
{
switch(pEvent.GetSocketEvent())
{
case wxSOCKET_INPUT:
DoRead();
break;
case wxSOCKET_OUTPUT:
if (m_inbuf != NULL)
DoWrite();
break;
case wxSOCKET_CONNECTION:
LogWorker(m_peer,wxString::Format(wxT("Unexpected wxSOCKET_CONNECTION in EventWorker")),LOG_ERROR);
break;
case wxSOCKET_LOST:
{
LogWorker(m_peer,wxString::Format(wxT("Connection lost")));
WorkerEvent e(this);
e.m_workerFailed = m_written != m_size;
wxGetApp().AddPendingEvent(e);
}
break;
}
}
void EventWorker::DoWrite() {
do {
if (m_written == m_size)
{
delete [] m_outbuf;
m_outbuf = NULL;
m_outfill = 0;
LogWorker(m_peer,wxString::Format(wxT("All data written")));
return;
}
if (m_outfill - m_written == 0)
{
return;
}
m_socket->Write(m_outbuf + m_written,m_outfill - m_written);
if (m_socket->Error())
{
if (m_socket->LastError() != wxSOCKET_WOULDBLOCK)
{
LogWorker(m_peer,
wxString::Format(wxT("Write error (%d): %s"),
m_socket->LastError(),
GetSocketErrorMsg(m_socket->LastError())
)
,LOG_ERROR
);
m_socket->Close();
}
else
{
LogWorker(m_peer,wxString::Format(wxT("Write would block, waiting for OUTPUT event")));
}
}
else
{
memmove(m_outbuf,m_outbuf+m_socket->LastCount(),m_outfill-m_socket->LastCount());
m_written += m_socket->LastCount();
}
LogWorker(m_peer,wxString::Format(wxT("Written %d of %d bytes, todo %d"),m_socket->LastCount(),m_size,m_size - m_written));
}
while (!m_socket->Error());
}
BEGIN_EVENT_TABLE(EventWorker,wxEvtHandler)
EVT_SOCKET(wxID_ANY,EventWorker::OnSocketEvent)
END_EVENT_TABLE()

View File

@@ -38,9 +38,7 @@
// --------------------------------------------------------------------------
// the application icon
#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
# include "mondrian.xpm"
#endif
#include "mondrian.xpm"
// --------------------------------------------------------------------------
// classes

View File

@@ -29,7 +29,7 @@ LIBDIRNAME = .\..\..\lib\$(COMPILER_PREFIX)_$(LIBTYPE_SUFFIX)$(CFG)
SETUPHDIR = \
$(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)
CLIENT_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG_0) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG_2) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
$(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
$(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include -I. $(__DLLFLAG_p) \
@@ -37,13 +37,29 @@ CLIENT_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
CLIENT_OBJECTS = \
$(OBJS)\client_client.obj
SERVER_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG_0) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG_2) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
$(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
$(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include -I. $(__DLLFLAG_p) \
-I.\..\..\samples -DNOPCH $(CPPFLAGS) $(CXXFLAGS)
SERVER_OBJECTS = \
$(OBJS)\server_server.obj
BASECLIENT_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG_2) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
$(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
$(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include -I. $(__DLLFLAG_p) \
-DwxUSE_GUI=0 $(CPPFLAGS) $(CXXFLAGS)
BASECLIENT_OBJECTS = \
$(OBJS)\baseclient_baseclient.obj
BASESERVER_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG_2) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
$(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
$(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include -I. $(__DLLFLAG_p) \
-DwxUSE_GUI=0 $(CPPFLAGS) $(CXXFLAGS)
BASESERVER_OBJECTS = \
$(OBJS)\baseserver_baseserver.obj
### Conditionally set variables: ###
@@ -80,6 +96,58 @@ EXTRALIBS_FOR_BASE =
!if "$(MONOLITHIC)" == "1"
EXTRALIBS_FOR_BASE =
!endif
!if "$(USE_GUI)" == "1"
__client___depname = $(OBJS)\client.exe
!endif
!if "$(USE_GUI)" == "1"
__server___depname = $(OBJS)\server.exe
!endif
!if "$(WXUNIV)" == "1"
__WXUNIV_DEFINE_p_0 = -d__WXUNIVERSAL__
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
__DEBUG_DEFINE_p_0 = -d__WXDEBUG__
!endif
!if "$(DEBUG_FLAG)" == "1"
__DEBUG_DEFINE_p_0 = -d__WXDEBUG__
!endif
!if "$(USE_EXCEPTIONS)" == "0"
__EXCEPTIONS_DEFINE_p_0 = -dwxNO_EXCEPTIONS
!endif
!if "$(USE_RTTI)" == "0"
__RTTI_DEFINE_p_0 = -dwxNO_RTTI
!endif
!if "$(USE_THREADS)" == "0"
__THREAD_DEFINE_p_0 = -dwxNO_THREADS
!endif
!if "$(UNICODE)" == "0"
__UNICODE_DEFINE_p_0 = -dwxUSE_UNICODE=0
!endif
!if "$(UNICODE)" == "1"
__UNICODE_DEFINE_p_0 = -d_UNICODE
!endif
!if "$(MSLU)" == "1"
__MSLU_DEFINE_p_0 = -dwxUSE_UNICODE_MSLU=1
!endif
!if "$(USE_GDIPLUS)" == "1"
__GFXCTX_DEFINE_p_0 = -dwxUSE_GRAPHICS_CONTEXT=1
!endif
!if "$(SHARED)" == "1"
__DLLFLAG_p_0 = -dWXUSINGDLL
!endif
!if "$(MONOLITHIC)" == "0"
__WXLIB_CORE_p = \
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
!endif
!if "$(BUILD)" == "debug"
__OPTIMIZEFLAG = -Od
!endif
@@ -93,10 +161,10 @@ __THREADSFLAG =
__THREADSFLAG = mt
!endif
!if "$(USE_THREADS)" == "0"
__THREADSFLAG_0 =
__THREADSFLAG_2 =
!endif
!if "$(USE_THREADS)" == "1"
__THREADSFLAG_0 = -tWM
__THREADSFLAG_2 = -tWM
!endif
!if "$(RUNTIME_LIBS)" == "dynamic"
__RUNTIME_LIBS = -tWR
@@ -105,81 +173,44 @@ __RUNTIME_LIBS = -tWR
__RUNTIME_LIBS =
!endif
!if "$(RUNTIME_LIBS)" == "dynamic"
__RUNTIME_LIBS_0 = i
__RUNTIME_LIBS_2 = i
!endif
!if "$(RUNTIME_LIBS)" == "static"
__RUNTIME_LIBS_0 =
__RUNTIME_LIBS_2 =
!endif
!if "$(WXUNIV)" == "1"
__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
!endif
!if "$(WXUNIV)" == "1"
__WXUNIV_DEFINE_p_0 = -d__WXUNIVERSAL__
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
__DEBUG_DEFINE_p = -D__WXDEBUG__
!endif
!if "$(DEBUG_FLAG)" == "1"
__DEBUG_DEFINE_p = -D__WXDEBUG__
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
__DEBUG_DEFINE_p_0 = -d__WXDEBUG__
!endif
!if "$(DEBUG_FLAG)" == "1"
__DEBUG_DEFINE_p_0 = -d__WXDEBUG__
!endif
!if "$(USE_EXCEPTIONS)" == "0"
__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS
!endif
!if "$(USE_EXCEPTIONS)" == "0"
__EXCEPTIONS_DEFINE_p_0 = -dwxNO_EXCEPTIONS
!endif
!if "$(USE_RTTI)" == "0"
__RTTI_DEFINE_p = -DwxNO_RTTI
!endif
!if "$(USE_RTTI)" == "0"
__RTTI_DEFINE_p_0 = -dwxNO_RTTI
!endif
!if "$(USE_THREADS)" == "0"
__THREAD_DEFINE_p = -DwxNO_THREADS
!endif
!if "$(USE_THREADS)" == "0"
__THREAD_DEFINE_p_0 = -dwxNO_THREADS
!endif
!if "$(UNICODE)" == "0"
__UNICODE_DEFINE_p = -DwxUSE_UNICODE=0
!endif
!if "$(UNICODE)" == "1"
__UNICODE_DEFINE_p = -D_UNICODE
!endif
!if "$(UNICODE)" == "0"
__UNICODE_DEFINE_p_0 = -dwxUSE_UNICODE=0
!endif
!if "$(UNICODE)" == "1"
__UNICODE_DEFINE_p_0 = -d_UNICODE
!endif
!if "$(MSLU)" == "1"
__MSLU_DEFINE_p = -DwxUSE_UNICODE_MSLU=1
!endif
!if "$(MSLU)" == "1"
__MSLU_DEFINE_p_0 = -dwxUSE_UNICODE_MSLU=1
!endif
!if "$(USE_GDIPLUS)" == "1"
__GFXCTX_DEFINE_p = -DwxUSE_GRAPHICS_CONTEXT=1
!endif
!if "$(USE_GDIPLUS)" == "1"
__GFXCTX_DEFINE_p_0 = -dwxUSE_GRAPHICS_CONTEXT=1
!endif
!if "$(SHARED)" == "1"
__DLLFLAG_p = -DWXUSINGDLL
!endif
!if "$(SHARED)" == "1"
__DLLFLAG_p_0 = -dWXUSINGDLL
!endif
!if "$(MONOLITHIC)" == "0"
__WXLIB_CORE_p = \
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
!endif
!if "$(MONOLITHIC)" == "0"
__WXLIB_NET_p = \
wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net.lib
@@ -192,15 +223,6 @@ __WXLIB_BASE_p = \
__WXLIB_MONO_p = \
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
!endif
!if "$(MSLU)" == "1"
__UNICOWS_LIB_p = unicows.lib
!endif
@@ -227,7 +249,7 @@ $(OBJS):
### Targets: ###
all: $(OBJS)\client.exe $(OBJS)\server.exe
all: $(__client___depname) $(__server___depname) $(OBJS)\baseclient.exe $(OBJS)\baseserver.exe
clean:
-if exist $(OBJS)\*.obj del $(OBJS)\*.obj
@@ -245,15 +267,41 @@ clean:
-if exist $(OBJS)\server.ild del $(OBJS)\server.ild
-if exist $(OBJS)\server.ilf del $(OBJS)\server.ilf
-if exist $(OBJS)\server.ils del $(OBJS)\server.ils
-if exist $(OBJS)\baseclient.exe del $(OBJS)\baseclient.exe
-if exist $(OBJS)\baseclient.tds del $(OBJS)\baseclient.tds
-if exist $(OBJS)\baseclient.ilc del $(OBJS)\baseclient.ilc
-if exist $(OBJS)\baseclient.ild del $(OBJS)\baseclient.ild
-if exist $(OBJS)\baseclient.ilf del $(OBJS)\baseclient.ilf
-if exist $(OBJS)\baseclient.ils del $(OBJS)\baseclient.ils
-if exist $(OBJS)\baseserver.exe del $(OBJS)\baseserver.exe
-if exist $(OBJS)\baseserver.tds del $(OBJS)\baseserver.tds
-if exist $(OBJS)\baseserver.ilc del $(OBJS)\baseserver.ilc
-if exist $(OBJS)\baseserver.ild del $(OBJS)\baseserver.ild
-if exist $(OBJS)\baseserver.ilf del $(OBJS)\baseserver.ilf
-if exist $(OBJS)\baseserver.ils del $(OBJS)\baseserver.ils
!if "$(USE_GUI)" == "1"
$(OBJS)\client.exe: $(CLIENT_OBJECTS) $(OBJS)\client_client.res
ilink32 -Tpe -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO) -L$(LIBDIRNAME) -aa @&&|
c0w32.obj $(CLIENT_OBJECTS),$@,, $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG)$(__RUNTIME_LIBS_0).lib,, $(OBJS)\client_client.res
c0w32.obj $(CLIENT_OBJECTS),$@,, $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG)$(__RUNTIME_LIBS_2).lib,, $(OBJS)\client_client.res
|
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\server.exe: $(SERVER_OBJECTS) $(OBJS)\server_server.res
ilink32 -Tpe -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO) -L$(LIBDIRNAME) -aa @&&|
c0w32.obj $(SERVER_OBJECTS),$@,, $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG)$(__RUNTIME_LIBS_0).lib,, $(OBJS)\server_server.res
c0w32.obj $(SERVER_OBJECTS),$@,, $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG)$(__RUNTIME_LIBS_2).lib,, $(OBJS)\server_server.res
|
!endif
$(OBJS)\baseclient.exe: $(BASECLIENT_OBJECTS)
ilink32 -Tpe -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO) -L$(LIBDIRNAME) -ap @&&|
c0x32.obj $(BASECLIENT_OBJECTS),$@,, $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG)$(__RUNTIME_LIBS_2).lib,,
|
$(OBJS)\baseserver.exe: $(BASESERVER_OBJECTS)
ilink32 -Tpe -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO) -L$(LIBDIRNAME) -ap @&&|
c0x32.obj $(BASESERVER_OBJECTS),$@,, $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG)$(__RUNTIME_LIBS_2).lib,,
|
$(OBJS)\client_client.obj: .\client.cpp
@@ -268,3 +316,9 @@ $(OBJS)\server_server.obj: .\server.cpp
$(OBJS)\server_server.res: .\server.rc
brcc32 -32 -r -fo$@ -i$(BCCDIR)\include -d__WXMSW__ $(__WXUNIV_DEFINE_p_0) $(__DEBUG_DEFINE_p_0) $(__EXCEPTIONS_DEFINE_p_0) $(__RTTI_DEFINE_p_0) $(__THREAD_DEFINE_p_0) $(__UNICODE_DEFINE_p_0) $(__MSLU_DEFINE_p_0) $(__GFXCTX_DEFINE_p_0) -i$(SETUPHDIR) -i.\..\..\include -i. $(__DLLFLAG_p_0) -i.\..\..\samples -dNOPCH $**
$(OBJS)\baseclient_baseclient.obj: .\baseclient.cpp
$(CXX) -q -c -P -o$@ $(BASECLIENT_CXXFLAGS) $**
$(OBJS)\baseserver_baseserver.obj: .\baseserver.cpp
$(CXX) -q -c -P -o$@ $(BASESERVER_CXXFLAGS) $**

View File

@@ -40,6 +40,24 @@ SERVER_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) $(GCCFLAGS)
SERVER_OBJECTS = \
$(OBJS)\server_server.o \
$(OBJS)\server_server_rc.o
BASECLIENT_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
$(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
$(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
$(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include -W -Wall -I. \
$(__DLLFLAG_p) -DwxUSE_GUI=0 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) \
-Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS)
BASECLIENT_OBJECTS = \
$(OBJS)\baseclient_baseclient.o
BASESERVER_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
$(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
$(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
$(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include -W -Wall -I. \
$(__DLLFLAG_p) -DwxUSE_GUI=0 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) \
-Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS)
BASESERVER_OBJECTS = \
$(OBJS)\baseserver_baseserver.o
### Conditionally set variables: ###
@@ -81,6 +99,60 @@ endif
ifeq ($(MONOLITHIC),1)
EXTRALIBS_FOR_BASE =
endif
ifeq ($(USE_GUI),1)
__client___depname = $(OBJS)\client.exe
endif
ifeq ($(USE_GUI),1)
__server___depname = $(OBJS)\server.exe
endif
ifeq ($(WXUNIV),1)
__WXUNIV_DEFINE_p_0 = --define __WXUNIVERSAL__
endif
ifeq ($(BUILD),debug)
ifeq ($(DEBUG_FLAG),default)
__DEBUG_DEFINE_p_0 = --define __WXDEBUG__
endif
endif
ifeq ($(DEBUG_FLAG),1)
__DEBUG_DEFINE_p_0 = --define __WXDEBUG__
endif
ifeq ($(USE_EXCEPTIONS),0)
__EXCEPTIONS_DEFINE_p_0 = --define wxNO_EXCEPTIONS
endif
ifeq ($(USE_RTTI),0)
__RTTI_DEFINE_p_0 = --define wxNO_RTTI
endif
ifeq ($(USE_THREADS),0)
__THREAD_DEFINE_p_0 = --define wxNO_THREADS
endif
ifeq ($(UNICODE),0)
__UNICODE_DEFINE_p_0 = --define wxUSE_UNICODE=0
endif
ifeq ($(UNICODE),1)
__UNICODE_DEFINE_p_0 = --define _UNICODE
endif
ifeq ($(MSLU),1)
__MSLU_DEFINE_p_0 = --define wxUSE_UNICODE_MSLU=1
endif
ifeq ($(USE_GDIPLUS),1)
__GFXCTX_DEFINE_p_0 = --define wxUSE_GRAPHICS_CONTEXT=1
endif
ifeq ($(SHARED),1)
__DLLFLAG_p_0 = --define WXUSINGDLL
endif
ifeq ($(MONOLITHIC),0)
__WXLIB_CORE_p = \
-lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core
endif
ifeq ($(USE_GUI),1)
__LIB_TIFF_p = -lwxtiff$(WXDEBUGFLAG)
endif
ifeq ($(USE_GUI),1)
__LIB_JPEG_p = -lwxjpeg$(WXDEBUGFLAG)
endif
ifeq ($(USE_GUI),1)
__LIB_PNG_p = -lwxpng$(WXDEBUGFLAG)
endif
ifeq ($(BUILD),debug)
__OPTIMIZEFLAG = -O0
endif
@@ -102,9 +174,6 @@ endif
ifeq ($(WXUNIV),1)
__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
endif
ifeq ($(WXUNIV),1)
__WXUNIV_DEFINE_p_0 = --define __WXUNIVERSAL__
endif
ifeq ($(BUILD),debug)
ifeq ($(DEBUG_FLAG),default)
__DEBUG_DEFINE_p = -D__WXDEBUG__
@@ -113,66 +182,30 @@ endif
ifeq ($(DEBUG_FLAG),1)
__DEBUG_DEFINE_p = -D__WXDEBUG__
endif
ifeq ($(BUILD),debug)
ifeq ($(DEBUG_FLAG),default)
__DEBUG_DEFINE_p_0 = --define __WXDEBUG__
endif
endif
ifeq ($(DEBUG_FLAG),1)
__DEBUG_DEFINE_p_0 = --define __WXDEBUG__
endif
ifeq ($(USE_EXCEPTIONS),0)
__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS
endif
ifeq ($(USE_EXCEPTIONS),0)
__EXCEPTIONS_DEFINE_p_0 = --define wxNO_EXCEPTIONS
endif
ifeq ($(USE_RTTI),0)
__RTTI_DEFINE_p = -DwxNO_RTTI
endif
ifeq ($(USE_RTTI),0)
__RTTI_DEFINE_p_0 = --define wxNO_RTTI
endif
ifeq ($(USE_THREADS),0)
__THREAD_DEFINE_p = -DwxNO_THREADS
endif
ifeq ($(USE_THREADS),0)
__THREAD_DEFINE_p_0 = --define wxNO_THREADS
endif
ifeq ($(UNICODE),0)
__UNICODE_DEFINE_p = -DwxUSE_UNICODE=0
endif
ifeq ($(UNICODE),1)
__UNICODE_DEFINE_p = -D_UNICODE
endif
ifeq ($(UNICODE),0)
__UNICODE_DEFINE_p_0 = --define wxUSE_UNICODE=0
endif
ifeq ($(UNICODE),1)
__UNICODE_DEFINE_p_0 = --define _UNICODE
endif
ifeq ($(MSLU),1)
__MSLU_DEFINE_p = -DwxUSE_UNICODE_MSLU=1
endif
ifeq ($(MSLU),1)
__MSLU_DEFINE_p_0 = --define wxUSE_UNICODE_MSLU=1
endif
ifeq ($(USE_GDIPLUS),1)
__GFXCTX_DEFINE_p = -DwxUSE_GRAPHICS_CONTEXT=1
endif
ifeq ($(USE_GDIPLUS),1)
__GFXCTX_DEFINE_p_0 = --define wxUSE_GRAPHICS_CONTEXT=1
endif
ifeq ($(SHARED),1)
__DLLFLAG_p = -DWXUSINGDLL
endif
ifeq ($(SHARED),1)
__DLLFLAG_p_0 = --define WXUSINGDLL
endif
ifeq ($(MONOLITHIC),0)
__WXLIB_CORE_p = \
-lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core
endif
ifeq ($(MONOLITHIC),0)
__WXLIB_NET_p = \
-lwxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net
@@ -185,15 +218,6 @@ ifeq ($(MONOLITHIC),1)
__WXLIB_MONO_p = \
-lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)
endif
ifeq ($(USE_GUI),1)
__LIB_TIFF_p = -lwxtiff$(WXDEBUGFLAG)
endif
ifeq ($(USE_GUI),1)
__LIB_JPEG_p = -lwxjpeg$(WXDEBUGFLAG)
endif
ifeq ($(USE_GUI),1)
__LIB_PNG_p = -lwxpng$(WXDEBUGFLAG)
endif
ifeq ($(MSLU),1)
__UNICOWS_LIB_p = -lunicows
endif
@@ -230,19 +254,31 @@ $(OBJS):
### Targets: ###
all: $(OBJS)\client.exe $(OBJS)\server.exe
all: $(__client___depname) $(__server___depname) $(OBJS)\baseclient.exe $(OBJS)\baseserver.exe
clean:
-if exist $(OBJS)\*.o del $(OBJS)\*.o
-if exist $(OBJS)\*.d del $(OBJS)\*.d
-if exist $(OBJS)\client.exe del $(OBJS)\client.exe
-if exist $(OBJS)\server.exe del $(OBJS)\server.exe
-if exist $(OBJS)\baseclient.exe del $(OBJS)\baseclient.exe
-if exist $(OBJS)\baseserver.exe del $(OBJS)\baseserver.exe
ifeq ($(USE_GUI),1)
$(OBJS)\client.exe: $(CLIENT_OBJECTS) $(OBJS)\client_client_rc.o
$(CXX) -o $@ $(CLIENT_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
endif
ifeq ($(USE_GUI),1)
$(OBJS)\server.exe: $(SERVER_OBJECTS) $(OBJS)\server_server_rc.o
$(CXX) -o $@ $(SERVER_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
endif
$(OBJS)\baseclient.exe: $(BASECLIENT_OBJECTS)
$(CXX) -o $@ $(BASECLIENT_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
$(OBJS)\baseserver.exe: $(BASESERVER_OBJECTS)
$(CXX) -o $@ $(BASESERVER_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
$(OBJS)\client_client.o: ./client.cpp
$(CXX) -c -o $@ $(CLIENT_CXXFLAGS) $(CPPDEPS) $<
@@ -256,6 +292,12 @@ $(OBJS)\server_server.o: ./server.cpp
$(OBJS)\server_server_rc.o: ./server.rc
windres --use-temp-file -i$< -o$@ --define __WXMSW__ $(__WXUNIV_DEFINE_p_0) $(__DEBUG_DEFINE_p_0) $(__EXCEPTIONS_DEFINE_p_0) $(__RTTI_DEFINE_p_0) $(__THREAD_DEFINE_p_0) $(__UNICODE_DEFINE_p_0) $(__MSLU_DEFINE_p_0) $(__GFXCTX_DEFINE_p_0) --include-dir $(SETUPHDIR) --include-dir ./../../include --include-dir . $(__DLLFLAG_p_0) --include-dir ./../../samples --define NOPCH
$(OBJS)\baseclient_baseclient.o: ./baseclient.cpp
$(CXX) -c -o $@ $(BASECLIENT_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\baseserver_baseserver.o: ./baseserver.cpp
$(CXX) -c -o $@ $(BASESERVER_CXXFLAGS) $(CPPDEPS) $<
.PHONY: all clean

View File

@@ -62,6 +62,14 @@ SERVER_CXXFLAGS = -I. `$(WX_CONFIG) --cxxflags $(WX_CONFIG_FLAGS)` $(CPPFLAGS) \
$(CXXFLAGS)
SERVER_OBJECTS = \
server_server.o
BASECLIENT_CXXFLAGS = -I. `$(WX_CONFIG) --cxxflags $(WX_CONFIG_FLAGS)` \
$(CPPFLAGS) $(CXXFLAGS)
BASECLIENT_OBJECTS = \
baseclient_baseclient.o
BASESERVER_CXXFLAGS = -I. `$(WX_CONFIG) --cxxflags $(WX_CONFIG_FLAGS)` \
$(CPPFLAGS) $(CXXFLAGS)
BASESERVER_OBJECTS = \
baseserver_baseserver.o
### Conditionally set variables: ###
@@ -87,7 +95,7 @@ endif
### Targets: ###
all: test_for_selected_wxbuild client server
all: test_for_selected_wxbuild client server baseclient baseserver
install: all
@@ -98,6 +106,8 @@ clean:
rm -f ./*.d
rm -f client
rm -f server
rm -f baseclient
rm -f baseserver
test_for_selected_wxbuild:
@$(WX_CONFIG) $(WX_CONFIG_FLAGS)
@@ -108,12 +118,24 @@ client: $(CLIENT_OBJECTS)
server: $(SERVER_OBJECTS)
$(CXX) -o $@ $(SERVER_OBJECTS) $(LDFLAGS) `$(WX_CONFIG) $(WX_CONFIG_FLAGS) --libs core,net,base`
baseclient: $(BASECLIENT_OBJECTS)
$(CXX) -o $@ $(BASECLIENT_OBJECTS) $(LDFLAGS) `$(WX_CONFIG) $(WX_CONFIG_FLAGS) --libs net,base`
baseserver: $(BASESERVER_OBJECTS)
$(CXX) -o $@ $(BASESERVER_OBJECTS) $(LDFLAGS) `$(WX_CONFIG) $(WX_CONFIG_FLAGS) --libs net,base`
client_client.o: ./client.cpp
$(CXX) -c -o $@ $(CLIENT_CXXFLAGS) $(CPPDEPS) $<
server_server.o: ./server.cpp
$(CXX) -c -o $@ $(SERVER_CXXFLAGS) $(CPPDEPS) $<
baseclient_baseclient.o: ./baseclient.cpp
$(CXX) -c -o $@ $(BASECLIENT_CXXFLAGS) $(CPPDEPS) $<
baseserver_baseserver.o: ./baseserver.cpp
$(CXX) -c -o $@ $(BASESERVER_CXXFLAGS) $(CPPDEPS) $<
.PHONY: all install uninstall clean

View File

@@ -42,6 +42,26 @@ SERVER_CXXFLAGS = /M$(__RUNTIME_LIBS_22)$(__DEBUGRUNTIME) /DWIN32 \
SERVER_OBJECTS = \
$(OBJS)\server_server.obj \
$(OBJS)\server_server.res
BASECLIENT_CXXFLAGS = /M$(__RUNTIME_LIBS_36)$(__DEBUGRUNTIME) /DWIN32 \
$(__DEBUGINFO) /Fd$(OBJS)\baseclient.pdb $(____DEBUGRUNTIME) \
$(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
$(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
$(__GFXCTX_DEFINE_p) /I$(SETUPHDIR) /I.\..\..\include /W4 /I. $(__DLLFLAG_p) \
/D_CONSOLE /DwxUSE_GUI=0 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) $(CPPFLAGS) \
$(CXXFLAGS)
BASECLIENT_OBJECTS = \
$(OBJS)\baseclient_baseclient.obj
BASESERVER_CXXFLAGS = /M$(__RUNTIME_LIBS_50)$(__DEBUGRUNTIME) /DWIN32 \
$(__DEBUGINFO) /Fd$(OBJS)\baseserver.pdb $(____DEBUGRUNTIME) \
$(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
$(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
$(__GFXCTX_DEFINE_p) /I$(SETUPHDIR) /I.\..\..\include /W4 /I. $(__DLLFLAG_p) \
/D_CONSOLE /DwxUSE_GUI=0 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) $(CPPFLAGS) \
$(CXXFLAGS)
BASESERVER_OBJECTS = \
$(OBJS)\baseserver_baseserver.obj
### Conditionally set variables: ###
@@ -102,18 +122,100 @@ EXTRALIBS_FOR_BASE =
!if "$(MONOLITHIC)" == "1"
EXTRALIBS_FOR_BASE =
!endif
!if "$(USE_GUI)" == "1"
__client___depname = $(OBJS)\client.exe
!endif
!if "$(RUNTIME_LIBS)" == "dynamic"
__RUNTIME_LIBS_8 = D
!endif
!if "$(RUNTIME_LIBS)" == "static"
__RUNTIME_LIBS_8 = $(__THREADSFLAG)
!endif
!if "$(USE_GUI)" == "1"
__server___depname = $(OBJS)\server.exe
!endif
!if "$(RUNTIME_LIBS)" == "dynamic"
__RUNTIME_LIBS_22 = D
!endif
!if "$(RUNTIME_LIBS)" == "static"
__RUNTIME_LIBS_22 = $(__THREADSFLAG)
!endif
!if "$(RUNTIME_LIBS)" == "dynamic"
__RUNTIME_LIBS_36 = D
!endif
!if "$(RUNTIME_LIBS)" == "static"
__RUNTIME_LIBS_36 = $(__THREADSFLAG)
!endif
!if "$(RUNTIME_LIBS)" == "dynamic"
__RUNTIME_LIBS_50 = D
!endif
!if "$(RUNTIME_LIBS)" == "static"
__RUNTIME_LIBS_50 = $(__THREADSFLAG)
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
____DEBUGRUNTIME_0 = /d _DEBUG
!endif
!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
____DEBUGRUNTIME_0 =
!endif
!if "$(DEBUG_RUNTIME_LIBS)" == "0"
____DEBUGRUNTIME_0 =
!endif
!if "$(DEBUG_RUNTIME_LIBS)" == "1"
____DEBUGRUNTIME_0 = /d _DEBUG
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0"
__NO_VC_CRTDBG_p_0 = /d __NO_VC_CRTDBG__
!endif
!if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1"
__NO_VC_CRTDBG_p_0 = /d __NO_VC_CRTDBG__
!endif
!if "$(WXUNIV)" == "1"
__WXUNIV_DEFINE_p_0 = /d __WXUNIVERSAL__
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
__DEBUG_DEFINE_p_0 = /d __WXDEBUG__
!endif
!if "$(DEBUG_FLAG)" == "1"
__DEBUG_DEFINE_p_0 = /d __WXDEBUG__
!endif
!if "$(USE_EXCEPTIONS)" == "0"
__EXCEPTIONS_DEFINE_p_0 = /d wxNO_EXCEPTIONS
!endif
!if "$(USE_RTTI)" == "0"
__RTTI_DEFINE_p_0 = /d wxNO_RTTI
!endif
!if "$(USE_THREADS)" == "0"
__THREAD_DEFINE_p_0 = /d wxNO_THREADS
!endif
!if "$(UNICODE)" == "0"
__UNICODE_DEFINE_p_0 = /d wxUSE_UNICODE=0
!endif
!if "$(UNICODE)" == "1"
__UNICODE_DEFINE_p_0 = /d _UNICODE
!endif
!if "$(MSLU)" == "1"
__MSLU_DEFINE_p_0 = /d wxUSE_UNICODE_MSLU=1
!endif
!if "$(USE_GDIPLUS)" == "1"
__GFXCTX_DEFINE_p_0 = /d wxUSE_GRAPHICS_CONTEXT=1
!endif
!if "$(SHARED)" == "1"
__DLLFLAG_p_0 = /d WXUSINGDLL
!endif
!if "$(MONOLITHIC)" == "0"
__WXLIB_CORE_p = \
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default"
__DEBUGINFO = /Zi
!endif
@@ -127,16 +229,16 @@ __DEBUGINFO =
__DEBUGINFO = /Zi
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default"
__DEBUGINFO_1 = /DEBUG
__DEBUGINFO_3 = /DEBUG
!endif
!if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default"
__DEBUGINFO_1 =
__DEBUGINFO_3 =
!endif
!if "$(DEBUG_INFO)" == "0"
__DEBUGINFO_1 =
__DEBUGINFO_3 =
!endif
!if "$(DEBUG_INFO)" == "1"
__DEBUGINFO_1 = /DEBUG
__DEBUGINFO_3 = /DEBUG
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
____DEBUGRUNTIME = /D_DEBUG
@@ -151,18 +253,6 @@ ____DEBUGRUNTIME =
____DEBUGRUNTIME = /D_DEBUG
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
____DEBUGRUNTIME_0 = /d _DEBUG
!endif
!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
____DEBUGRUNTIME_0 =
!endif
!if "$(DEBUG_RUNTIME_LIBS)" == "0"
____DEBUGRUNTIME_0 =
!endif
!if "$(DEBUG_RUNTIME_LIBS)" == "1"
____DEBUGRUNTIME_0 = /d _DEBUG
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
__DEBUGRUNTIME = d
!endif
!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
@@ -204,82 +294,39 @@ __NO_VC_CRTDBG_p = /D__NO_VC_CRTDBG__
!if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1"
__NO_VC_CRTDBG_p = /D__NO_VC_CRTDBG__
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0"
__NO_VC_CRTDBG_p_0 = /d __NO_VC_CRTDBG__
!endif
!if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1"
__NO_VC_CRTDBG_p_0 = /d __NO_VC_CRTDBG__
!endif
!if "$(WXUNIV)" == "1"
__WXUNIV_DEFINE_p = /D__WXUNIVERSAL__
!endif
!if "$(WXUNIV)" == "1"
__WXUNIV_DEFINE_p_0 = /d __WXUNIVERSAL__
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
__DEBUG_DEFINE_p = /D__WXDEBUG__
!endif
!if "$(DEBUG_FLAG)" == "1"
__DEBUG_DEFINE_p = /D__WXDEBUG__
!endif
!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
__DEBUG_DEFINE_p_0 = /d __WXDEBUG__
!endif
!if "$(DEBUG_FLAG)" == "1"
__DEBUG_DEFINE_p_0 = /d __WXDEBUG__
!endif
!if "$(USE_EXCEPTIONS)" == "0"
__EXCEPTIONS_DEFINE_p = /DwxNO_EXCEPTIONS
!endif
!if "$(USE_EXCEPTIONS)" == "0"
__EXCEPTIONS_DEFINE_p_0 = /d wxNO_EXCEPTIONS
!endif
!if "$(USE_RTTI)" == "0"
__RTTI_DEFINE_p = /DwxNO_RTTI
!endif
!if "$(USE_RTTI)" == "0"
__RTTI_DEFINE_p_0 = /d wxNO_RTTI
!endif
!if "$(USE_THREADS)" == "0"
__THREAD_DEFINE_p = /DwxNO_THREADS
!endif
!if "$(USE_THREADS)" == "0"
__THREAD_DEFINE_p_0 = /d wxNO_THREADS
!endif
!if "$(UNICODE)" == "0"
__UNICODE_DEFINE_p = /DwxUSE_UNICODE=0
!endif
!if "$(UNICODE)" == "1"
__UNICODE_DEFINE_p = /D_UNICODE
!endif
!if "$(UNICODE)" == "0"
__UNICODE_DEFINE_p_0 = /d wxUSE_UNICODE=0
!endif
!if "$(UNICODE)" == "1"
__UNICODE_DEFINE_p_0 = /d _UNICODE
!endif
!if "$(MSLU)" == "1"
__MSLU_DEFINE_p = /DwxUSE_UNICODE_MSLU=1
!endif
!if "$(MSLU)" == "1"
__MSLU_DEFINE_p_0 = /d wxUSE_UNICODE_MSLU=1
!endif
!if "$(USE_GDIPLUS)" == "1"
__GFXCTX_DEFINE_p = /DwxUSE_GRAPHICS_CONTEXT=1
!endif
!if "$(USE_GDIPLUS)" == "1"
__GFXCTX_DEFINE_p_0 = /d wxUSE_GRAPHICS_CONTEXT=1
!endif
!if "$(SHARED)" == "1"
__DLLFLAG_p = /DWXUSINGDLL
!endif
!if "$(SHARED)" == "1"
__DLLFLAG_p_0 = /d WXUSINGDLL
!endif
!if "$(MONOLITHIC)" == "0"
__WXLIB_CORE_p = \
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
!endif
!if "$(MONOLITHIC)" == "0"
__WXLIB_NET_p = \
wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net.lib
@@ -292,15 +339,6 @@ __WXLIB_BASE_p = \
__WXLIB_MONO_p = \
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
!endif
!if "$(USE_GUI)" == "1"
__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
!endif
!if "$(MSLU)" == "1"
__UNICOWS_LIB_p = unicows.lib
!endif
@@ -315,7 +353,7 @@ $(OBJS):
### Targets: ###
all: $(OBJS)\client.exe $(OBJS)\server.exe
all: $(__client___depname) $(__server___depname) $(OBJS)\baseclient.exe $(OBJS)\baseserver.exe
clean:
-if exist $(OBJS)\*.obj del $(OBJS)\*.obj
@@ -327,16 +365,36 @@ clean:
-if exist $(OBJS)\server.exe del $(OBJS)\server.exe
-if exist $(OBJS)\server.ilk del $(OBJS)\server.ilk
-if exist $(OBJS)\server.pdb del $(OBJS)\server.pdb
-if exist $(OBJS)\baseclient.exe del $(OBJS)\baseclient.exe
-if exist $(OBJS)\baseclient.ilk del $(OBJS)\baseclient.ilk
-if exist $(OBJS)\baseclient.pdb del $(OBJS)\baseclient.pdb
-if exist $(OBJS)\baseserver.exe del $(OBJS)\baseserver.exe
-if exist $(OBJS)\baseserver.ilk del $(OBJS)\baseserver.ilk
-if exist $(OBJS)\baseserver.pdb del $(OBJS)\baseserver.pdb
!if "$(USE_GUI)" == "1"
$(OBJS)\client.exe: $(CLIENT_OBJECTS) $(OBJS)\client_client.res
link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_1) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<<
link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_3) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<<
$(CLIENT_OBJECTS) $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib
<<
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\server.exe: $(SERVER_OBJECTS) $(OBJS)\server_server.res
link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_1) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<<
link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_3) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<<
$(SERVER_OBJECTS) $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib
<<
!endif
$(OBJS)\baseclient.exe: $(BASECLIENT_OBJECTS)
link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_3) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:CONSOLE @<<
$(BASECLIENT_OBJECTS) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib
<<
$(OBJS)\baseserver.exe: $(BASESERVER_OBJECTS)
link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_3) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:CONSOLE @<<
$(BASESERVER_OBJECTS) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib
<<
$(OBJS)\client_client.obj: .\client.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CLIENT_CXXFLAGS) $**
@@ -350,3 +408,9 @@ $(OBJS)\server_server.obj: .\server.cpp
$(OBJS)\server_server.res: .\server.rc
rc /fo$@ /d WIN32 $(____DEBUGRUNTIME_0) $(__NO_VC_CRTDBG_p_0) /d __WXMSW__ $(__WXUNIV_DEFINE_p_0) $(__DEBUG_DEFINE_p_0) $(__EXCEPTIONS_DEFINE_p_0) $(__RTTI_DEFINE_p_0) $(__THREAD_DEFINE_p_0) $(__UNICODE_DEFINE_p_0) $(__MSLU_DEFINE_p_0) $(__GFXCTX_DEFINE_p_0) /i $(SETUPHDIR) /i .\..\..\include /i . $(__DLLFLAG_p_0) /d _WINDOWS /i .\..\..\samples /d NOPCH $**
$(OBJS)\baseclient_baseclient.obj: .\baseclient.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASECLIENT_CXXFLAGS) $**
$(OBJS)\baseserver_baseserver.obj: .\baseserver.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASESERVER_CXXFLAGS) $**

View File

@@ -69,6 +69,31 @@ EXTRALIBS_FOR_BASE =
!ifeq MONOLITHIC 1
EXTRALIBS_FOR_BASE =
!endif
__client___depname =
!ifeq USE_GUI 1
__client___depname = $(OBJS)\client.exe
!endif
__server___depname =
!ifeq USE_GUI 1
__server___depname = $(OBJS)\server.exe
!endif
__WXLIB_CORE_p =
!ifeq MONOLITHIC 0
__WXLIB_CORE_p = &
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
!endif
__LIB_TIFF_p =
!ifeq USE_GUI 1
__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
!endif
__LIB_JPEG_p =
!ifeq USE_GUI 1
__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
!endif
__LIB_PNG_p =
!ifeq USE_GUI 1
__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
!endif
__DEBUGINFO =
!ifeq BUILD debug
!ifeq DEBUG_INFO default
@@ -86,22 +111,22 @@ __DEBUGINFO = -d0
!ifeq DEBUG_INFO 1
__DEBUGINFO = -d2
!endif
__DEBUGINFO_1 =
__DEBUGINFO_3 =
!ifeq BUILD debug
!ifeq DEBUG_INFO default
__DEBUGINFO_1 = debug all
__DEBUGINFO_3 = debug all
!endif
!endif
!ifeq BUILD release
!ifeq DEBUG_INFO default
__DEBUGINFO_1 =
__DEBUGINFO_3 =
!endif
!endif
!ifeq DEBUG_INFO 0
__DEBUGINFO_1 =
__DEBUGINFO_3 =
!endif
!ifeq DEBUG_INFO 1
__DEBUGINFO_1 = debug all
__DEBUGINFO_3 = debug all
!endif
__OPTIMIZEFLAG =
!ifeq BUILD debug
@@ -138,42 +163,6 @@ __EXCEPTIONSFLAG =
!ifeq USE_EXCEPTIONS 1
__EXCEPTIONSFLAG = -xs
!endif
__WXLIB_CORE_p =
!ifeq MONOLITHIC 0
__WXLIB_CORE_p = &
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
!endif
__WXLIB_NET_p =
!ifeq MONOLITHIC 0
__WXLIB_NET_p = &
wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net.lib
!endif
__WXLIB_BASE_p =
!ifeq MONOLITHIC 0
__WXLIB_BASE_p = &
wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
!endif
__WXLIB_MONO_p =
!ifeq MONOLITHIC 1
__WXLIB_MONO_p = &
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
!endif
__LIB_TIFF_p =
!ifeq USE_GUI 1
__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
!endif
__LIB_JPEG_p =
!ifeq USE_GUI 1
__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
!endif
__LIB_PNG_p =
!ifeq USE_GUI 1
__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
!endif
__GDIPLUS_LIB_p =
!ifeq USE_GDIPLUS 1
__GDIPLUS_LIB_p = gdiplus.lib
!endif
__WXUNIV_DEFINE_p =
!ifeq WXUNIV 1
__WXUNIV_DEFINE_p = -d__WXUNIVERSAL__
@@ -214,6 +203,25 @@ __DLLFLAG_p =
!ifeq SHARED 1
__DLLFLAG_p = -dWXUSINGDLL
!endif
__WXLIB_NET_p =
!ifeq MONOLITHIC 0
__WXLIB_NET_p = &
wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net.lib
!endif
__WXLIB_BASE_p =
!ifeq MONOLITHIC 0
__WXLIB_BASE_p = &
wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
!endif
__WXLIB_MONO_p =
!ifeq MONOLITHIC 1
__WXLIB_MONO_p = &
wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
!endif
__GDIPLUS_LIB_p =
!ifeq USE_GDIPLUS 1
__GDIPLUS_LIB_p = gdiplus.lib
!endif
### Variables: ###
@@ -242,6 +250,22 @@ SERVER_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
$(CXXFLAGS)
SERVER_OBJECTS = &
$(OBJS)\server_server.obj
BASECLIENT_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
$(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
$(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) &
$(__UNICODE_DEFINE_p) $(__GFXCTX_DEFINE_p) -i=$(SETUPHDIR) &
-i=.\..\..\include -wx -wcd=549 -wcd=656 -wcd=657 -wcd=667 -i=. $(__DLLFLAG_p) &
-dwxUSE_GUI=0 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) $(CPPFLAGS) $(CXXFLAGS)
BASECLIENT_OBJECTS = &
$(OBJS)\baseclient_baseclient.obj
BASESERVER_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
$(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
$(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) &
$(__UNICODE_DEFINE_p) $(__GFXCTX_DEFINE_p) -i=$(SETUPHDIR) &
-i=.\..\..\include -wx -wcd=549 -wcd=656 -wcd=657 -wcd=667 -i=. $(__DLLFLAG_p) &
-dwxUSE_GUI=0 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) $(CPPFLAGS) $(CXXFLAGS)
BASESERVER_OBJECTS = &
$(OBJS)\baseserver_baseserver.obj
all : $(OBJS)
@@ -250,7 +274,7 @@ $(OBJS) :
### Targets: ###
all : .SYMBOLIC $(OBJS)\client.exe $(OBJS)\server.exe
all : .SYMBOLIC $(__client___depname) $(__server___depname) $(OBJS)\baseclient.exe $(OBJS)\baseserver.exe
clean : .SYMBOLIC
-if exist $(OBJS)\*.obj del $(OBJS)\*.obj
@@ -260,30 +284,60 @@ clean : .SYMBOLIC
-if exist $(OBJS)\*.pch del $(OBJS)\*.pch
-if exist $(OBJS)\client.exe del $(OBJS)\client.exe
-if exist $(OBJS)\server.exe del $(OBJS)\server.exe
-if exist $(OBJS)\baseclient.exe del $(OBJS)\baseclient.exe
-if exist $(OBJS)\baseserver.exe del $(OBJS)\baseserver.exe
!ifeq USE_GUI 1
$(OBJS)\client.exe : $(CLIENT_OBJECTS) $(OBJS)\client_client.res
@%create $(OBJS)\client.lbc
@%append $(OBJS)\client.lbc option quiet
@%append $(OBJS)\client.lbc name $^@
@%append $(OBJS)\client.lbc option caseexact
@%append $(OBJS)\client.lbc $(LDFLAGS) $(__DEBUGINFO_1) libpath $(LIBDIRNAME) system nt_win ref '_WinMain@16'
@%append $(OBJS)\client.lbc $(LDFLAGS) $(__DEBUGINFO_3) libpath $(LIBDIRNAME) system nt_win ref '_WinMain@16'
@for %i in ($(CLIENT_OBJECTS)) do @%append $(OBJS)\client.lbc file %i
@for %i in ( $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib) do @%append $(OBJS)\client.lbc library %i
@%append $(OBJS)\client.lbc option resource=$(OBJS)\client_client.res
@for %i in () do @%append $(OBJS)\client.lbc option stack=%i
wlink @$(OBJS)\client.lbc
!endif
!ifeq USE_GUI 1
$(OBJS)\server.exe : $(SERVER_OBJECTS) $(OBJS)\server_server.res
@%create $(OBJS)\server.lbc
@%append $(OBJS)\server.lbc option quiet
@%append $(OBJS)\server.lbc name $^@
@%append $(OBJS)\server.lbc option caseexact
@%append $(OBJS)\server.lbc $(LDFLAGS) $(__DEBUGINFO_1) libpath $(LIBDIRNAME) system nt_win ref '_WinMain@16'
@%append $(OBJS)\server.lbc $(LDFLAGS) $(__DEBUGINFO_3) libpath $(LIBDIRNAME) system nt_win ref '_WinMain@16'
@for %i in ($(SERVER_OBJECTS)) do @%append $(OBJS)\server.lbc file %i
@for %i in ( $(__WXLIB_CORE_p) $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib) do @%append $(OBJS)\server.lbc library %i
@%append $(OBJS)\server.lbc option resource=$(OBJS)\server_server.res
@for %i in () do @%append $(OBJS)\server.lbc option stack=%i
wlink @$(OBJS)\server.lbc
!endif
$(OBJS)\baseclient.exe : $(BASECLIENT_OBJECTS)
@%create $(OBJS)\baseclient.lbc
@%append $(OBJS)\baseclient.lbc option quiet
@%append $(OBJS)\baseclient.lbc name $^@
@%append $(OBJS)\baseclient.lbc option caseexact
@%append $(OBJS)\baseclient.lbc $(LDFLAGS) $(__DEBUGINFO_3) libpath $(LIBDIRNAME) system nt ref 'main_'
@for %i in ($(BASECLIENT_OBJECTS)) do @%append $(OBJS)\baseclient.lbc file %i
@for %i in ( $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib) do @%append $(OBJS)\baseclient.lbc library %i
@%append $(OBJS)\baseclient.lbc
@for %i in () do @%append $(OBJS)\baseclient.lbc option stack=%i
wlink @$(OBJS)\baseclient.lbc
$(OBJS)\baseserver.exe : $(BASESERVER_OBJECTS)
@%create $(OBJS)\baseserver.lbc
@%append $(OBJS)\baseserver.lbc option quiet
@%append $(OBJS)\baseserver.lbc name $^@
@%append $(OBJS)\baseserver.lbc option caseexact
@%append $(OBJS)\baseserver.lbc $(LDFLAGS) $(__DEBUGINFO_3) libpath $(LIBDIRNAME) system nt ref 'main_'
@for %i in ($(BASESERVER_OBJECTS)) do @%append $(OBJS)\baseserver.lbc file %i
@for %i in ( $(__WXLIB_NET_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib) do @%append $(OBJS)\baseserver.lbc library %i
@%append $(OBJS)\baseserver.lbc
@for %i in () do @%append $(OBJS)\baseserver.lbc option stack=%i
wlink @$(OBJS)\baseserver.lbc
$(OBJS)\client_client.obj : .AUTODEPEND .\client.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(CLIENT_CXXFLAGS) $<
@@ -297,3 +351,9 @@ $(OBJS)\server_server.obj : .AUTODEPEND .\server.cpp
$(OBJS)\server_server.res : .AUTODEPEND .\server.rc
wrc -q -ad -bt=nt -r -fo=$^@ -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__GFXCTX_DEFINE_p) -i=$(SETUPHDIR) -i=.\..\..\include -i=. $(__DLLFLAG_p) -i=.\..\..\samples -dNOPCH $<
$(OBJS)\baseclient_baseclient.obj : .AUTODEPEND .\baseclient.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(BASECLIENT_CXXFLAGS) $<
$(OBJS)\baseserver_baseserver.obj : .AUTODEPEND .\baseserver.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(BASESERVER_CXXFLAGS) $<

View File

@@ -36,9 +36,7 @@
// --------------------------------------------------------------------------
// the application icon
#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
# include "mondrian.xpm"
#endif
#include "mondrian.xpm"
// --------------------------------------------------------------------------
// classes

View File

@@ -3,7 +3,15 @@
<include file="../../build/bakefiles/common_samples.bkl"/>
<exe id="client" template="wx_sample" template_append="wx_append">
<if cond="FORMAT=='gnu'">
<!-- as we can't (easily) test for GUI, build them always -->
<set var="cond_build_gui">1</set>
</if>
<if cond="FORMAT!='gnu'">
<set var="cond_build_gui">USE_GUI=='1'</set>
</if>
<exe id="client" template="wx_sample" template_append="wx_append" cond="$(cond_build_gui)">
<sources>client.cpp</sources>
<wx-lib>core</wx-lib>
<wx-lib>net</wx-lib>
@@ -11,7 +19,7 @@
<win32-res>client.rc</win32-res>
</exe>
<exe id="server" template="wx_sample" template_append="wx_append">
<exe id="server" template="wx_sample" template_append="wx_append" cond="$(cond_build_gui)">
<sources>server.cpp</sources>
<wx-lib>core</wx-lib>
<wx-lib>net</wx-lib>
@@ -19,4 +27,18 @@
<win32-res>server.rc</win32-res>
</exe>
<exe id="baseclient" template="wx_sample_console"
template_append="wx_append_base">
<sources>baseclient.cpp</sources>
<wx-lib>net</wx-lib>
<wx-lib>base</wx-lib>
</exe>
<exe id="baseserver" template="wx_sample_console"
template_append="wx_append_base">
<sources>baseserver.cpp</sources>
<wx-lib>net</wx-lib>
<wx-lib>base</wx-lib>
</exe>
</makefile>

View File

@@ -0,0 +1,243 @@
# Microsoft Developer Studio Project File - Name="sockets_baseclient" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=baseclient - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "sockets_baseclient.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "sockets_baseclient.mak" CFG="baseclient - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "baseclient - Win32 DLL Universal Release" (based on "Win32 (x86) Console Application")
!MESSAGE "baseclient - Win32 DLL Universal Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "baseclient - Win32 DLL Release" (based on "Win32 (x86) Console Application")
!MESSAGE "baseclient - Win32 DLL Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "baseclient - Win32 Universal Release" (based on "Win32 (x86) Console Application")
!MESSAGE "baseclient - Win32 Universal Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "baseclient - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "baseclient - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "baseclient - Win32 DLL Universal Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "vc_mswunivudll"
# PROP BASE Intermediate_Dir "vc_mswunivudll\baseclient"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "vc_mswunivudll"
# PROP Intermediate_Dir "vc_mswunivudll\baseclient"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MD /Fdvc_mswunivudll\baseclient.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MD /Fdvc_mswunivudll\baseclient.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivudll\baseclient.exe" /libpath:".\..\..\lib\vc_dll" /subsystem:console
# ADD LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivudll\baseclient.exe" /libpath:".\..\..\lib\vc_dll" /subsystem:console
!ELSEIF "$(CFG)" == "baseclient - Win32 DLL Universal Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "vc_mswunivuddll"
# PROP BASE Intermediate_Dir "vc_mswunivuddll\baseclient"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "vc_mswunivuddll"
# PROP Intermediate_Dir "vc_mswunivuddll\baseclient"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswunivuddll\baseclient.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswunivuddll\baseclient.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivuddll\baseclient.exe" /debug /libpath:".\..\..\lib\vc_dll" /subsystem:console
# ADD LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivuddll\baseclient.exe" /debug /libpath:".\..\..\lib\vc_dll" /subsystem:console
!ELSEIF "$(CFG)" == "baseclient - Win32 DLL Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "vc_mswudll"
# PROP BASE Intermediate_Dir "vc_mswudll\baseclient"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "vc_mswudll"
# PROP Intermediate_Dir "vc_mswudll\baseclient"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MD /Fdvc_mswudll\baseclient.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MD /Fdvc_mswudll\baseclient.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswudll\baseclient.exe" /libpath:".\..\..\lib\vc_dll" /subsystem:console
# ADD LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswudll\baseclient.exe" /libpath:".\..\..\lib\vc_dll" /subsystem:console
!ELSEIF "$(CFG)" == "baseclient - Win32 DLL Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "vc_mswuddll"
# PROP BASE Intermediate_Dir "vc_mswuddll\baseclient"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "vc_mswuddll"
# PROP Intermediate_Dir "vc_mswuddll\baseclient"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswuddll\baseclient.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_dll\mswud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswuddll\baseclient.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_dll\mswud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswuddll\baseclient.exe" /debug /libpath:".\..\..\lib\vc_dll" /subsystem:console
# ADD LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswuddll\baseclient.exe" /debug /libpath:".\..\..\lib\vc_dll" /subsystem:console
!ELSEIF "$(CFG)" == "baseclient - Win32 Universal Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "vc_mswunivu"
# PROP BASE Intermediate_Dir "vc_mswunivu\baseclient"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "vc_mswunivu"
# PROP Intermediate_Dir "vc_mswunivu\baseclient"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MD /Fdvc_mswunivu\baseclient.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MD /Fdvc_mswunivu\baseclient.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivu" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivu" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivu\baseclient.exe" /libpath:".\..\..\lib\vc_lib" /subsystem:console
# ADD LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivu\baseclient.exe" /libpath:".\..\..\lib\vc_lib" /subsystem:console
!ELSEIF "$(CFG)" == "baseclient - Win32 Universal Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "vc_mswunivud"
# PROP BASE Intermediate_Dir "vc_mswunivud\baseclient"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "vc_mswunivud"
# PROP Intermediate_Dir "vc_mswunivud\baseclient"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswunivud\baseclient.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswunivud\baseclient.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivud" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivud" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivud\baseclient.exe" /debug /libpath:".\..\..\lib\vc_lib" /subsystem:console
# ADD LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivud\baseclient.exe" /debug /libpath:".\..\..\lib\vc_lib" /subsystem:console
!ELSEIF "$(CFG)" == "baseclient - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "vc_mswu"
# PROP BASE Intermediate_Dir "vc_mswu\baseclient"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "vc_mswu"
# PROP Intermediate_Dir "vc_mswu\baseclient"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MD /Fdvc_mswu\baseclient.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MD /Fdvc_mswu\baseclient.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswu" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswu" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswu\baseclient.exe" /libpath:".\..\..\lib\vc_lib" /subsystem:console
# ADD LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswu\baseclient.exe" /libpath:".\..\..\lib\vc_lib" /subsystem:console
!ELSEIF "$(CFG)" == "baseclient - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "vc_mswud"
# PROP BASE Intermediate_Dir "vc_mswud\baseclient"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "vc_mswud"
# PROP Intermediate_Dir "vc_mswud\baseclient"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswud\baseclient.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_lib\mswud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswud\baseclient.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_lib\mswud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswud" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswud" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswud\baseclient.exe" /debug /libpath:".\..\..\lib\vc_lib" /subsystem:console
# ADD LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswud\baseclient.exe" /debug /libpath:".\..\..\lib\vc_lib" /subsystem:console
!ENDIF
# Begin Target
# Name "baseclient - Win32 DLL Universal Release"
# Name "baseclient - Win32 DLL Universal Debug"
# Name "baseclient - Win32 DLL Release"
# Name "baseclient - Win32 DLL Debug"
# Name "baseclient - Win32 Universal Release"
# Name "baseclient - Win32 Universal Debug"
# Name "baseclient - Win32 Release"
# Name "baseclient - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\baseclient.cpp
# End Source File
# End Group
# End Target
# End Project

View File

@@ -0,0 +1,243 @@
# Microsoft Developer Studio Project File - Name="sockets_baseserver" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=baseserver - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "sockets_baseserver.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "sockets_baseserver.mak" CFG="baseserver - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "baseserver - Win32 DLL Universal Release" (based on "Win32 (x86) Console Application")
!MESSAGE "baseserver - Win32 DLL Universal Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "baseserver - Win32 DLL Release" (based on "Win32 (x86) Console Application")
!MESSAGE "baseserver - Win32 DLL Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "baseserver - Win32 Universal Release" (based on "Win32 (x86) Console Application")
!MESSAGE "baseserver - Win32 Universal Debug" (based on "Win32 (x86) Console Application")
!MESSAGE "baseserver - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "baseserver - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "baseserver - Win32 DLL Universal Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "vc_mswunivudll"
# PROP BASE Intermediate_Dir "vc_mswunivudll\baseserver"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "vc_mswunivudll"
# PROP Intermediate_Dir "vc_mswunivudll\baseserver"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MD /Fdvc_mswunivudll\baseserver.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MD /Fdvc_mswunivudll\baseserver.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivudll\baseserver.exe" /libpath:".\..\..\lib\vc_dll" /subsystem:console
# ADD LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivudll\baseserver.exe" /libpath:".\..\..\lib\vc_dll" /subsystem:console
!ELSEIF "$(CFG)" == "baseserver - Win32 DLL Universal Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "vc_mswunivuddll"
# PROP BASE Intermediate_Dir "vc_mswunivuddll\baseserver"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "vc_mswunivuddll"
# PROP Intermediate_Dir "vc_mswunivuddll\baseserver"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswunivuddll\baseserver.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswunivuddll\baseserver.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivuddll\baseserver.exe" /debug /libpath:".\..\..\lib\vc_dll" /subsystem:console
# ADD LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivuddll\baseserver.exe" /debug /libpath:".\..\..\lib\vc_dll" /subsystem:console
!ELSEIF "$(CFG)" == "baseserver - Win32 DLL Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "vc_mswudll"
# PROP BASE Intermediate_Dir "vc_mswudll\baseserver"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "vc_mswudll"
# PROP Intermediate_Dir "vc_mswudll\baseserver"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MD /Fdvc_mswudll\baseserver.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MD /Fdvc_mswudll\baseserver.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswudll\baseserver.exe" /libpath:".\..\..\lib\vc_dll" /subsystem:console
# ADD LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswudll\baseserver.exe" /libpath:".\..\..\lib\vc_dll" /subsystem:console
!ELSEIF "$(CFG)" == "baseserver - Win32 DLL Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "vc_mswuddll"
# PROP BASE Intermediate_Dir "vc_mswuddll\baseserver"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "vc_mswuddll"
# PROP Intermediate_Dir "vc_mswuddll\baseserver"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswuddll\baseserver.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_dll\mswud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswuddll\baseserver.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_dll\mswud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswuddll\baseserver.exe" /debug /libpath:".\..\..\lib\vc_dll" /subsystem:console
# ADD LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswuddll\baseserver.exe" /debug /libpath:".\..\..\lib\vc_dll" /subsystem:console
!ELSEIF "$(CFG)" == "baseserver - Win32 Universal Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "vc_mswunivu"
# PROP BASE Intermediate_Dir "vc_mswunivu\baseserver"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "vc_mswunivu"
# PROP Intermediate_Dir "vc_mswunivu\baseserver"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MD /Fdvc_mswunivu\baseserver.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MD /Fdvc_mswunivu\baseserver.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivu" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivu" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivu\baseserver.exe" /libpath:".\..\..\lib\vc_lib" /subsystem:console
# ADD LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivu\baseserver.exe" /libpath:".\..\..\lib\vc_lib" /subsystem:console
!ELSEIF "$(CFG)" == "baseserver - Win32 Universal Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "vc_mswunivud"
# PROP BASE Intermediate_Dir "vc_mswunivud\baseserver"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "vc_mswunivud"
# PROP Intermediate_Dir "vc_mswunivud\baseserver"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswunivud\baseserver.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswunivud\baseserver.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivud" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivud" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivud\baseserver.exe" /debug /libpath:".\..\..\lib\vc_lib" /subsystem:console
# ADD LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivud\baseserver.exe" /debug /libpath:".\..\..\lib\vc_lib" /subsystem:console
!ELSEIF "$(CFG)" == "baseserver - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "vc_mswu"
# PROP BASE Intermediate_Dir "vc_mswu\baseserver"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "vc_mswu"
# PROP Intermediate_Dir "vc_mswu\baseserver"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MD /Fdvc_mswu\baseserver.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MD /Fdvc_mswu\baseserver.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswu" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswu" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswu" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswu\baseserver.exe" /libpath:".\..\..\lib\vc_lib" /subsystem:console
# ADD LINK32 wxbase29u_net.lib wxbase29u.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswu\baseserver.exe" /libpath:".\..\..\lib\vc_lib" /subsystem:console
!ELSEIF "$(CFG)" == "baseserver - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "vc_mswud"
# PROP BASE Intermediate_Dir "vc_mswud\baseserver"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "vc_mswud"
# PROP Intermediate_Dir "vc_mswud\baseserver"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswud\baseserver.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_lib\mswud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD CPP /nologo /FD /MDd /Zi /Gm /GZ /Fdvc_mswud\baseserver.pdb /Od /GR /EHsc /I ".\..\..\lib\vc_lib\mswud" /I ".\..\..\include" /W4 /I "." /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "_CONSOLE" /D wxUSE_GUI=0 /c
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswud" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswud" /i ".\..\..\include" /i "." /d "_CONSOLE" /d wxUSE_GUI=0
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswud\baseserver.exe" /debug /libpath:".\..\..\lib\vc_lib" /subsystem:console
# ADD LINK32 wxbase29ud_net.lib wxbase29ud.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswud\baseserver.exe" /debug /libpath:".\..\..\lib\vc_lib" /subsystem:console
!ENDIF
# Begin Target
# Name "baseserver - Win32 DLL Universal Release"
# Name "baseserver - Win32 DLL Universal Debug"
# Name "baseserver - Win32 DLL Release"
# Name "baseserver - Win32 DLL Debug"
# Name "baseserver - Win32 Universal Release"
# Name "baseserver - Win32 Universal Debug"
# Name "baseserver - Win32 Release"
# Name "baseserver - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\baseserver.cpp
# End Source File
# End Group
# End Target
# End Project

View File

@@ -645,13 +645,6 @@ void wxConsoleAppTraitsBase::RemoveFromPendingDelete(wxObject * WXUNUSED(object)
// nothing to do
}
#if wxUSE_SOCKETS
GSocketGUIFunctionsTable* wxConsoleAppTraitsBase::GetSocketGUIFunctionsTable()
{
return NULL;
}
#endif
// ----------------------------------------------------------------------------
// wxAppTraits
// ----------------------------------------------------------------------------

View File

@@ -545,28 +545,3 @@ void wxGUIAppTraitsBase::RemoveFromPendingDelete(wxObject *object)
wxPendingDelete.DeleteObject(object);
}
#if wxUSE_SOCKETS
#if defined(__WINDOWS__)
#include "wx/msw/gsockmsw.h"
#elif defined(__UNIX__) || defined(__DARWIN__) || defined(__OS2__)
#include "wx/unix/gsockunx.h"
#elif defined(__WXMAC__)
#include <MacHeaders.c>
#define OTUNIXERRORS 1
#include <OpenTransport.h>
#include <OpenTransportProviders.h>
#include <OpenTptInternet.h>
#include "wx/mac/gsockmac.h"
#else
#error "Must include correct GSocket header here"
#endif
GSocketGUIFunctionsTable* wxGUIAppTraitsBase::GetSocketGUIFunctionsTable()
{
static GSocketGUIFunctionsTableConcrete table;
return &table;
}
#endif

View File

@@ -55,7 +55,7 @@ wxFDIODispatcher *wxFDIODispatcher::Get()
#endif // wxUSE_EPOLL_DISPATCHER
#if wxUSE_SELECT_DISPATCHER
gs_dispatcher = wxSelectDispatcher::Create();
#endif // wxUSE_WCHAR_T
#endif // wxUSE_SELECT_DISPATCHER
}
wxASSERT_MSG( gs_dispatcher, _T("failed to create any IO dispatchers") );

View File

@@ -5,6 +5,7 @@
// Created: 08.24.06
// RCS-ID: $Id$
// Copyright: (c) 2006 Angel vidal
// (c) 2007 Vadim Zeitlin <vadim@wxwidgets.org>
// License: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
@@ -21,111 +22,34 @@
#if wxUSE_SOCKETS && wxUSE_SELECT_DISPATCHER
#include "wx/private/gsocketiohandler.h"
#include "wx/apptrait.h"
#include "wx/unix/private.h"
#include "wx/gsocket.h"
#include "wx/unix/gsockunx.h"
#include "wx/private/gsocketiohandler.h"
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// wxGSocketIOHandler
// GSocketSelectManager
// ----------------------------------------------------------------------------
wxGSocketIOHandler::wxGSocketIOHandler(GSocket* socket)
: m_socket(socket),
m_flags(0)
class GSocketSelectManager : public GSocketFDBasedManager
{
public:
virtual void Install_Callback(GSocket *socket, GSocketEvent event);
virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event);
};
}
void wxGSocketIOHandler::OnReadWaiting()
{
m_socket->Detected_Read();
}
void wxGSocketIOHandler::OnWriteWaiting()
{
m_socket->Detected_Write();
}
void wxGSocketIOHandler::OnExceptionWaiting()
{
m_socket->Detected_Read();
}
int wxGSocketIOHandler::GetFlags() const
{
return m_flags;
}
void wxGSocketIOHandler::RemoveFlag(wxFDIODispatcherEntryFlags flag)
{
m_flags &= ~flag;
}
void wxGSocketIOHandler::AddFlag(wxFDIODispatcherEntryFlags flag)
{
m_flags |= flag;
}
// ----------------------------------------------------------------------------
// GSocket interface
// ----------------------------------------------------------------------------
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
{
return true;
}
bool GSocketGUIFunctionsTableConcrete::OnInit()
{
return true;
}
void GSocketGUIFunctionsTableConcrete::OnExit()
{
}
bool GSocketGUIFunctionsTableConcrete::Init_Socket(GSocket *socket)
{
int *m_id;
socket->m_gui_dependent = (char *)malloc(sizeof(int)*2);
m_id = (int *)(socket->m_gui_dependent);
m_id[0] = -1;
m_id[1] = -1;
return true;
}
void GSocketGUIFunctionsTableConcrete::Destroy_Socket(GSocket *socket)
{
free(socket->m_gui_dependent);
}
void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket,
void GSocketSelectManager::Install_Callback(GSocket *socket,
GSocketEvent event)
{
int *m_id = (int *)(socket->m_gui_dependent);
const int fd = socket->m_fd;
if ( fd == -1 )
return;
int c;
switch (event)
{
case GSOCK_LOST: /* fall-through */
case GSOCK_INPUT: c = 0; break;
case GSOCK_OUTPUT: c = 1; break;
case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
default: return;
}
const SocketDir d = GetDirForEvent(socket, event);
wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
if ( !dispatcher )
@@ -145,14 +69,13 @@ void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket,
handler = new wxGSocketIOHandler(socket);
}
if (c == 0)
FD(socket, d) = fd;
if (d == FD_INPUT)
{
m_id[0] = fd;
handler->AddFlag(wxFDIO_INPUT);
}
else
{
m_id[1] = fd;
handler->AddFlag(wxFDIO_OUTPUT);
}
@@ -162,28 +85,19 @@ void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket,
dispatcher->ModifyFD(fd, handler, handler->GetFlags());
}
void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket,
void GSocketSelectManager::Uninstall_Callback(GSocket *socket,
GSocketEvent event)
{
int *m_id = (int *)(socket->m_gui_dependent);
int c;
const SocketDir d = GetDirForEvent(socket, event);
switch (event)
{
case GSOCK_LOST: /* fall-through */
case GSOCK_INPUT: c = 0; break;
case GSOCK_OUTPUT: c = 1; break;
case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
default: return;
}
if ( m_id[c] == -1 )
const int fd = FD(socket, d);
if ( fd == -1 )
return;
int fd = m_id[c];
m_id[c] = -1;
FD(socket, d) = -1;
const wxFDIODispatcherEntryFlags flag = c == 0 ? wxFDIO_INPUT : wxFDIO_OUTPUT;
const wxFDIODispatcherEntryFlags
flag = d == FD_INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT;
wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
if ( !dispatcher )
@@ -198,6 +112,7 @@ void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket,
{
dispatcher->UnregisterFD(fd);
delete handler;
socket->m_handler = NULL;
}
else
{
@@ -210,16 +125,11 @@ void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket,
}
}
void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
GSocketManager *wxAppTraits::GetSocketManager()
{
Install_Callback(socket, GSOCK_INPUT);
Install_Callback(socket, GSOCK_OUTPUT);
}
static GSocketSelectManager s_manager;
void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
{
Uninstall_Callback(socket, GSOCK_INPUT);
Uninstall_Callback(socket, GSOCK_OUTPUT);
return &s_manager;
}
#endif // wxUSE_SOCKETS

View File

@@ -96,14 +96,10 @@ bool wxSelectSets::SetFD(int fd, int flags)
if ( flags & ms_flags[n] )
{
wxFD_SET(fd, &m_fds[n]);
wxLogTrace(wxSelectDispatcher_Trace,
_T("Registered fd %d for %s events"), fd, ms_names[n]);
}
else if ( wxFD_ISSET(fd, (fd_set*) &m_fds[n]) )
{
wxFD_CLR(fd, &m_fds[n]);
wxLogTrace(wxSelectDispatcher_Trace,
_T("Unregistered fd %d from %s events"), fd, ms_names[n]);
}
}
@@ -124,6 +120,9 @@ void wxSelectSets::Handle(int fd, wxFDIOHandler& handler) const
wxLogTrace(wxSelectDispatcher_Trace,
_T("Got %s event on fd %d"), ms_names[n], fd);
(handler.*ms_handlers[n])();
// callback can modify sets and destroy handler
// this forces that one event can be processed at one time
return;
}
}
}
@@ -154,6 +153,8 @@ bool wxSelectDispatcher::RegisterFD(int fd, wxFDIOHandler *handler, int flags)
if ( fd > m_maxFD )
m_maxFD = fd;
wxLogTrace(wxSelectDispatcher_Trace,
_T("Registered fd %d: input:%d, output:%d, exceptional:%d"), fd, (flags & wxFDIO_INPUT) == wxFDIO_INPUT, (flags & wxFDIO_OUTPUT), (flags & wxFDIO_EXCEPTION) == wxFDIO_EXCEPTION);
return true;
}
@@ -164,6 +165,8 @@ bool wxSelectDispatcher::ModifyFD(int fd, wxFDIOHandler *handler, int flags)
wxASSERT_MSG( fd <= m_maxFD, _T("logic error: registered fd > m_maxFD?") );
wxLogTrace(wxSelectDispatcher_Trace,
_T("Modified fd %d: input:%d, output:%d, exceptional:%d"), fd, (flags & wxFDIO_INPUT) == wxFDIO_INPUT, (flags & wxFDIO_OUTPUT) == wxFDIO_OUTPUT, (flags & wxFDIO_EXCEPTION) == wxFDIO_EXCEPTION);
return m_sets.SetFD(fd, flags);
}
@@ -186,11 +189,15 @@ bool wxSelectDispatcher::UnregisterFD(int fd)
++it )
{
if ( it->first > m_maxFD )
{
m_maxFD = it->first;
}
}
}
}
wxLogTrace(wxSelectDispatcher_Trace,
_T("Removed fd %d, current max: %d"), fd, m_maxFD);
return true;
}

View File

@@ -40,6 +40,7 @@
#include "wx/sckaddr.h"
#include "wx/stopwatch.h"
#include "wx/thread.h"
#include "wx/evtloop.h"
// DLL options compatibility check:
#include "wx/build.h"
@@ -101,6 +102,50 @@ public:
DECLARE_NO_COPY_CLASS(wxSocketState)
};
// ============================================================================
// GSocketManager
// ============================================================================
GSocketManager *GSocketManager::ms_manager = NULL;
/* static */
void GSocketManager::Set(GSocketManager *manager)
{
wxASSERT_MSG( !ms_manager, "too late to set manager now" );
ms_manager = manager;
}
/* static */
void GSocketManager::Init()
{
wxASSERT_MSG( !ms_manager, "shouldn't be initialized twice" );
/*
Details: Initialize() creates a hidden window as a sink for socket
events, such as 'read completed'. wxMSW has only one message loop
for the main thread. If Initialize is called in a secondary thread,
the socket window will be created for the secondary thread, but
since there is no message loop on this thread, it will never
receive events and all socket operations will time out.
BTW, the main thread must not be stopped using sleep or block
on a semaphore (a bad idea in any case) or socket operations
will time out.
On the Mac side, Initialize() stores a pointer to the CFRunLoop for
the main thread. Because secondary threads do not have run loops,
adding event notifications to the "Current" loop would have no
effect at all, events would never fire.
*/
wxASSERT_MSG( wxIsMainThread(),
"sockets must be initialized from the main thread" );
wxAppConsole * const app = wxAppConsole::GetInstance();
wxCHECK_RET( app, "sockets can't be initialized without wxApp" );
ms_manager = app->GetTraits()->GetSocketManager();
}
// ==========================================================================
// wxSocketBase
// ==========================================================================
@@ -122,31 +167,6 @@ bool wxSocketBase::Initialize()
{
if ( !m_countInit++ )
{
/*
Details: Initialize() creates a hidden window as a sink for socket
events, such as 'read completed'. wxMSW has only one message loop
for the main thread. If Initialize is called in a secondary thread,
the socket window will be created for the secondary thread, but
since there is no message loop on this thread, it will never
receive events and all socket operations will time out.
BTW, the main thread must not be stopped using sleep or block
on a semaphore (a bad idea in any case) or socket operations
will time out.
On the Mac side, Initialize() stores a pointer to the CFRunLoop for
the main thread. Because secondary threads do not have run loops,
adding event notifications to the "Current" loop would have no
effect at all, events would never fire.
*/
wxASSERT_MSG( wxIsMainThread(),
wxT("Call wxSocketBase::Initialize() from the main thread first!"));
wxAppTraits *traits = wxAppConsole::GetInstance() ?
wxAppConsole::GetInstance()->GetTraits() : NULL;
GSocketGUIFunctionsTable *functions =
traits ? traits->GetSocketGUIFunctionsTable() : NULL;
GSocket_SetGUIFunctions(functions);
if ( !GSocket_Init() )
{
m_countInit--;
@@ -161,7 +181,7 @@ bool wxSocketBase::Initialize()
void wxSocketBase::Shutdown()
{
// we should be initialized
wxASSERT_MSG( m_countInit, _T("extra call to Shutdown()") );
wxASSERT_MSG( m_countInit > 0, _T("extra call to Shutdown()") );
if ( --m_countInit == 0 )
{
GSocket_Cleanup();
@@ -695,7 +715,9 @@ bool wxSocketBase::_Wait(long seconds,
else
timeout = m_timeout * 1000;
bool has_event_loop = wxTheApp->GetTraits() ? (wxTheApp->GetTraits()->GetSocketGUIFunctionsTable() ? true : false) : false;
// check if we are using event loop or not: normally we do in GUI but not in
// console applications but this can be overridden
const bool has_event_loop = wxEventLoop::GetActive() != NULL;
// Wait in an active polling loop.
//
@@ -1009,6 +1031,8 @@ void wxSocketBase::OnRequest(wxSocketNotify notification)
void wxSocketBase::Notify(bool notify)
{
m_notify = notify;
if (m_socket)
m_socket->Notify(notify);
}
void wxSocketBase::SetNotify(wxSocketEventFlags flags)
@@ -1097,7 +1121,7 @@ wxSocketServer::wxSocketServer(const wxSockAddress& addr_man,
}
// Setup the socket as server
m_socket->Notify(m_notify);
m_socket->SetLocal(addr_man.GetAddress());
if (GetFlags() & wxSOCKET_REUSEADDR) {
@@ -1123,6 +1147,8 @@ wxSocketServer::wxSocketServer(const wxSockAddress& addr_man,
m_socket->SetCallback(GSOCK_INPUT_FLAG | GSOCK_OUTPUT_FLAG |
GSOCK_LOST_FLAG | GSOCK_CONNECTION_FLAG,
wx_socket_callback, (char *)this);
wxLogTrace( wxTRACE_Socket, _T("wxSocketServer on fd %d"), m_socket->m_fd );
}
// --------------------------------------------------------------------------
@@ -1310,6 +1336,9 @@ bool wxSocketClient::DoConnect(wxSockAddress& addr_man, wxSockAddress* local, bo
m_socket->SetPeer(addr_man.GetAddress());
err = m_socket->Connect(GSOCK_STREAMED);
//this will register for callbacks - must be called after m_socket->m_fd was initialized
m_socket->Notify(m_notify);
if (!wait)
m_socket->SetNonBlocking(0);
@@ -1365,6 +1394,7 @@ wxDatagramSocket::wxDatagramSocket( const wxSockAddress& addr,
wxFAIL_MSG( _T("datagram socket not new'd") );
return;
}
m_socket->Notify(m_notify);
// Setup the socket as non connection oriented
m_socket->SetLocal(addr.GetAddress());
if (flags & wxSOCKET_REUSEADDR)

View File

@@ -1,17 +1,18 @@
/* -------------------------------------------------------------------------
* Project: GSocket (Generic Socket) for WX
* Name: src/gtk/gsockgtk.cpp
* Purpose: GSocket: GTK part
* Licence: The wxWindows licence
* CVSID: $Id$
* -------------------------------------------------------------------------
*/
///////////////////////////////////////////////////////////////////////////////
// Name: gtk/gsockgtk.cpp
// Purpose: implementation of wxGTK-specific socket event handling
// Author: Guilhem Lavaux, Vadim Zeitlin
// Created: 1999
// RCS-ID: $Id$
// Copyright: (c) 1999, 2007 wxWidgets dev team
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_SOCKETS
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
@@ -19,8 +20,7 @@
#include <glib.h>
#include "wx/gsocket.h"
#include "wx/unix/gsockunx.h"
#include "wx/apptrait.h"
extern "C" {
static
@@ -37,95 +37,30 @@ void _GSocket_GDK_Input(gpointer data,
}
}
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
{ return true; }
bool GSocketGUIFunctionsTableConcrete::OnInit(void)
class GTKSocketManager : public GSocketInputBasedManager
{
return 1;
}
void GSocketGUIFunctionsTableConcrete::OnExit(void)
{
}
bool GSocketGUIFunctionsTableConcrete::Init_Socket(GSocket *socket)
{
gint *m_id;
socket->m_gui_dependent = (char *)malloc(sizeof(gint)*2);
m_id = (gint *)(socket->m_gui_dependent);
m_id[0] = -1;
m_id[1] = -1;
return TRUE;
}
void GSocketGUIFunctionsTableConcrete::Destroy_Socket(GSocket *socket)
{
free(socket->m_gui_dependent);
}
void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket, GSocketEvent event)
{
gint *m_id = (gint *)(socket->m_gui_dependent);
int c;
if (socket->m_fd == -1)
return;
switch (event)
public:
virtual int AddInput(GSocket *socket, SocketDir d)
{
case GSOCK_LOST: /* fall-through */
case GSOCK_INPUT: c = 0; break;
case GSOCK_OUTPUT: c = 1; break;
case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
default: return;
}
if (m_id[c] != -1)
gdk_input_remove(m_id[c]);
m_id[c] = gdk_input_add(socket->m_fd,
(c ? GDK_INPUT_WRITE : GDK_INPUT_READ),
return gdk_input_add
(
socket->m_fd,
d == FD_OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
_GSocket_GDK_Input,
(gpointer)socket);
}
void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket, GSocketEvent event)
{
gint *m_id = (gint *)(socket->m_gui_dependent);
int c;
assert( m_id != NULL );
switch (event)
{
case GSOCK_LOST: /* fall-through */
case GSOCK_INPUT: c = 0; break;
case GSOCK_OUTPUT: c = 1; break;
case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
default: return;
socket
);
}
if (m_id[c] != -1)
virtual void RemoveInput(int fd)
{
gdk_input_remove(m_id[c]);
m_id[c] = -1;
gdk_input_remove(fd);
}
}
};
void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
GSocketManager *wxGUIAppTraits::GetSocketManager()
{
Install_Callback(socket, GSOCK_INPUT);
Install_Callback(socket, GSOCK_OUTPUT);
}
void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
{
Uninstall_Callback(socket, GSOCK_INPUT);
Uninstall_Callback(socket, GSOCK_OUTPUT);
static GTKSocketManager s_manager;
return &s_manager;
}
#endif // wxUSE_SOCKETS

View File

@@ -1,17 +1,18 @@
/* -------------------------------------------------------------------------
* Project: GSocket (Generic Socket) for WX
* Name: src/gtk1/gsockgtk.cpp
* Purpose: GSocket: GTK part
* Licence: The wxWindows licence
* CVSID: $Id$
* -------------------------------------------------------------------------
*/
///////////////////////////////////////////////////////////////////////////////
// Name: gtk/gsockgtk.cpp
// Purpose: implementation of wxGTK-specific socket event handling
// Author: Guilhem Lavaux, Vadim Zeitlin
// Created: 1999
// RCS-ID: $Id$
// Copyright: (c) 1999, 2007 wxWidgets dev team
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_SOCKETS
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
@@ -19,8 +20,7 @@
#include <glib.h>
#include "wx/gsocket.h"
#include "wx/unix/gsockunx.h"
#include "wx/apptrait.h"
extern "C" {
static
@@ -37,100 +37,30 @@ void _GSocket_GDK_Input(gpointer data,
}
}
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
{ return true; }
bool GSocketGUIFunctionsTableConcrete::OnInit(void)
class GTKSocketManager : public GSocketInputBasedManager
{
return 1;
}
void GSocketGUIFunctionsTableConcrete::OnExit(void)
{
}
bool GSocketGUIFunctionsTableConcrete::Init_Socket(GSocket *socket)
{
gint *m_id;
socket->m_gui_dependent = (char *)malloc(sizeof(gint)*2);
m_id = (gint *)(socket->m_gui_dependent);
m_id[0] = -1;
m_id[1] = -1;
return TRUE;
}
void GSocketGUIFunctionsTableConcrete::Destroy_Socket(GSocket *socket)
{
free(socket->m_gui_dependent);
}
void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket, GSocketEvent event)
{
gint *m_id = (gint *)(socket->m_gui_dependent);
int c;
if (socket->m_fd == -1)
return;
switch (event)
public:
virtual int AddInput(GSocket *socket, SocketDir d)
{
case GSOCK_LOST: /* fall-through */
case GSOCK_INPUT: c = 0; break;
case GSOCK_OUTPUT: c = 1; break;
case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
default: return;
}
if (m_id[c] != -1)
gdk_input_remove(m_id[c]);
m_id[c] = gdk_input_add(socket->m_fd,
(c ? GDK_INPUT_WRITE : GDK_INPUT_READ),
return gdk_input_add
(
socket->m_fd,
d == FD_OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
_GSocket_GDK_Input,
(gpointer)socket);
}
void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket, GSocketEvent event)
{
gint *m_id = (gint *)(socket->m_gui_dependent);
int c;
assert( m_id != NULL );
switch (event)
{
case GSOCK_LOST: /* fall-through */
case GSOCK_INPUT: c = 0; break;
case GSOCK_OUTPUT: c = 1; break;
case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
default: return;
socket
);
}
if (m_id[c] != -1)
virtual void RemoveInput(int fd)
{
gdk_input_remove(m_id[c]);
m_id[c] = -1;
gdk_input_remove(fd);
}
}
};
void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
GSocketManager *wxGUIAppTraits::GetSocketManager()
{
Install_Callback(socket, GSOCK_INPUT);
Install_Callback(socket, GSOCK_OUTPUT);
static GTKSocketManager s_manager;
return &s_manager;
}
void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
{
Uninstall_Callback(socket, GSOCK_INPUT);
Uninstall_Callback(socket, GSOCK_OUTPUT);
}
#else /* !wxUSE_SOCKETS */
/* some compilers don't like having empty source files */
static int wxDummyGsockVar = 0;
#endif /* wxUSE_SOCKETS/!wxUSE_SOCKETS */
#endif // wxUSE_SOCKETS

View File

@@ -194,19 +194,11 @@ static void SetDefaultEndpointModes(EndpointRef ep , void *data )
*/
}
/* Global initialisers */
void GSocket_SetGUIFunctions(GSocketGUIFunctionsTable *table)
bool GSocket_Init()
{
// do nothing, wxMac doesn't have wxBase-GUI separation yet
return true;
}
int GSocket_Init()
{
return 1;
}
bool GSocket_Verify_Inited() ;
bool GSocket_Verify_Inited()
{
OSStatus err ;

View File

@@ -10,35 +10,105 @@
#if wxUSE_SOCKETS
#include <stdlib.h>
#include "wx/gsocket.h"
#include "wx/unix/gsockunx.h"
#include "wx/apptrait.h"
#include <CoreFoundation/CoreFoundation.h>
#define ALL_CALLBACK_TYPES (kCFSocketReadCallBack | kCFSocketWriteCallBack | kCFSocketConnectCallBack)
// ----------------------------------------------------------------------------
// Mac-specific data associated with each socket by GSocketCFManager
// ----------------------------------------------------------------------------
struct MacGSocketData
class MacGSocketData
{
CFSocketRef socket;
CFRunLoopSourceRef source;
};
public:
// default ctor creates the object in uninitialized state, use Initialize()
// later to make it usable
MacGSocketData()
{
m_socket = NULL;
m_source = NULL;
}
// Sockets must use the event loop on the main thread
// We will store the main loop's reference when Initialize is called
static CFRunLoopRef s_mainRunLoop = NULL;
// initialize the data associated with the given socket
bool Initialize(GSocket *socket)
{
wxASSERT_MSG( !IsInitialized(), "shouldn't be called twice" );
// we need a valid Unix socket to create a CFSocket
if ( socket->m_fd < 0 )
return false;
CFSocketContext cont;
cont.version = 0; // this currently must be 0
cont.info = socket; // pointer passed to our callback
cont.retain = NULL; // no need to retain/release/copy the
cont.release = NULL; // socket pointer, so all callbacks
cont.copyDescription = NULL; // can be left NULL
m_socket = CFSocketCreateWithNative
(
NULL, // default allocator
socket->m_fd,
kCFSocketReadCallBack |
kCFSocketWriteCallBack |
kCFSocketConnectCallBack,
SocketCallback,
&cont
);
if ( !m_socket )
return false;
m_source = CFSocketCreateRunLoopSource(NULL, m_socket, 0);
return m_source != NULL;
}
// free the objects created by Initialize()
~MacGSocketData()
{
if ( m_source )
CFRelease(m_source);
if ( m_socket )
CFRelease(m_socket);
}
// return true if Initialize() had already been called successfully
bool IsInitialized() const { return m_source && m_socket; }
// accessors: should only be called if IsInitialized()
CFSocketRef GetSocket() const
{
wxASSERT( IsInitialized() );
return m_socket;
}
CFRunLoopSourceRef GetSource() const
{
wxASSERT( IsInitialized() );
return m_source;
}
private:
static void SocketCallback(CFSocketRef WXUNUSED(s),
CFSocketCallBackType callbackType,
CFDataRef WXUNUSED(address),
const void* data,
void* info)
{
GSocket * const socket = wx_static_cast(GSocket *, info);
MacGSocketData * const
macdata = wx_static_cast(MacGSocketData *, socket->m_gui_dependent);
if ( !macdata )
return;
void Mac_Socket_Callback(CFSocketRef WXUNUSED(s), CFSocketCallBackType callbackType,
CFDataRef WXUNUSED(address), const void* data, void* info)
{
GSocket* socket = (GSocket*)info;
struct MacGSocketData* macdata;
macdata = (struct MacGSocketData*)socket->m_gui_dependent;
if (!macdata) return;
switch (callbackType)
{
case kCFSocketConnectCallBack:
assert(!socket->m_server);
wxASSERT(!socket->m_server);
// KH: If data is non-NULL, the connect failed, do not call Detected_Write,
// which will only end up creating a spurious connect event because the
// call to getsocketopt SO_ERROR inexplicably returns no error.
@@ -48,167 +118,201 @@ void Mac_Socket_Callback(CFSocketRef WXUNUSED(s), CFSocketCallBackType callbackT
if (data == NULL)
socket->Detected_Write();
break;
case kCFSocketReadCallBack:
socket->Detected_Read();
break;
case kCFSocketWriteCallBack:
socket->Detected_Write();
break;
default:
break; /* We shouldn't get here. */
wxFAIL_MSG( "unexpected socket callback" );
}
}
}
struct MacGSocketData* _GSocket_Get_Mac_Socket(GSocket *socket)
CFSocketRef m_socket;
CFRunLoopSourceRef m_source;
DECLARE_NO_COPY_CLASS(MacGSocketData);
};
// ----------------------------------------------------------------------------
// CoreFoundation implementation of GSocketManager
// ----------------------------------------------------------------------------
class GSocketCFManager : public GSocketManager
{
/* If socket is already created, returns a pointer to the data */
/* Otherwise, creates socket and returns the pointer */
CFSocketContext cont;
struct MacGSocketData* data = (struct MacGSocketData*)socket->m_gui_dependent;
public:
virtual bool OnInit();
virtual void OnExit();
if (data && data->source) return data;
virtual bool Init_Socket(GSocket *socket);
virtual void Destroy_Socket(GSocket *socket);
/* CFSocket has not been created, create it: */
if (socket->m_fd < 0 || !data) return NULL;
cont.version = 0; cont.retain = NULL;
cont.release = NULL; cont.copyDescription = NULL;
cont.info = socket;
virtual void Install_Callback(GSocket *socket, GSocketEvent event);
virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event);
CFSocketRef cf = CFSocketCreateWithNative(NULL, socket->m_fd,
ALL_CALLBACK_TYPES, Mac_Socket_Callback, &cont);
CFRunLoopSourceRef source = CFSocketCreateRunLoopSource(NULL, cf, 0);
assert(source);
socket->m_gui_dependent = (char*)data;
virtual void Enable_Events(GSocket *socket);
virtual void Disable_Events(GSocket *socket);
/* Keep the source and the socket around. */
data->source = source;
data->socket = cf;
private:
// retrieve our custom data associated with the given socket
//
// this is a low level function, use GetInitializedData() instead if the
// data pointer should also be correctly initialized if it hadn't been done
// yet
//
// may return NULL if we hadn't created the data for this socket yet
MacGSocketData *GetData(GSocket *socket) const
{
return wx_static_cast(MacGSocketData *, socket->m_gui_dependent);
}
// return the custom data pointer initializing it if it hadn't been done
// yet
//
// may return NULL if there is no associated data
MacGSocketData *GetInitializedData(GSocket *socket) const
{
MacGSocketData * const data = GetData(socket);
if ( data && !data->IsInitialized() )
{
if ( !data->Initialize(socket) )
return NULL;
}
return data;
}
}
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
{ return true; }
// return CFSocket callback mask corresponding to the given event (the
// socket parameter is needed because some events are interpreted
// differently depending on whether they happen on a server or on a client
// socket)
static int GetCFCallback(GSocket *socket, GSocketEvent event);
bool GSocketGUIFunctionsTableConcrete::OnInit(void)
// Sockets must use the event loop on the main thread so we store a
// reference to the main loop here in OnInit()
static CFRunLoopRef ms_mainRunLoop;
};
CFRunLoopRef GSocketCFManager::ms_mainRunLoop = NULL;
bool GSocketCFManager::OnInit()
{
// No need to store the main loop again
if (s_mainRunLoop != NULL)
if (ms_mainRunLoop != NULL)
return true;
// Get the loop for the main thread so our events will actually fire.
// The common socket.cpp code will assert if initialize is called from a
// secondary thread, otherwise Mac would have the same problems as MSW
s_mainRunLoop = CFRunLoopGetCurrent();
CFRetain(s_mainRunLoop);
ms_mainRunLoop = CFRunLoopGetCurrent();
if ( !ms_mainRunLoop )
return false;
CFRetain(ms_mainRunLoop);
return true;
}
void GSocketGUIFunctionsTableConcrete::OnExit(void)
void GSocketCFManager::OnExit()
{
// Release the reference count, and set the reference back to NULL
CFRelease(s_mainRunLoop);
s_mainRunLoop = NULL;
CFRelease(ms_mainRunLoop);
ms_mainRunLoop = NULL;
}
bool GSocketGUIFunctionsTableConcrete::Init_Socket(GSocket *socket)
bool GSocketCFManager::Init_Socket(GSocket *socket)
{
struct MacGSocketData *data = (struct MacGSocketData *)malloc(sizeof(struct MacGSocketData));
if (data)
socket->m_gui_dependent = new MacGSocketData;
return true;
}
void GSocketCFManager::Destroy_Socket(GSocket *socket)
{
MacGSocketData * const data = GetData(socket);
if ( data )
{
socket->m_gui_dependent = (char*)data;
data->socket = NULL;
data->source = NULL;
return 1;
delete data;
socket->m_gui_dependent = NULL;
}
}
/* static */
int GSocketCFManager::GetCFCallback(GSocket *socket, GSocketEvent event)
{
switch ( event )
{
case GSOCK_CONNECTION:
return socket->m_server ? kCFSocketReadCallBack
: kCFSocketConnectCallBack;
case GSOCK_LOST:
case GSOCK_INPUT:
return kCFSocketReadCallBack;
case GSOCK_OUTPUT:
return kCFSocketWriteCallBack;
case GSOCK_MAX_EVENT:
wxFAIL_MSG( "invalid GSocketEvent" );
return 0;
}
void GSocketGUIFunctionsTableConcrete::Destroy_Socket(GSocket *socket)
{
struct MacGSocketData *data = (struct MacGSocketData*)(socket->m_gui_dependent);
if (data)
{
if ( data->source )
CFRelease(data->source);
if ( data->socket )
CFRelease(data->socket);
free(data);
}
}
void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket, GSocketEvent event)
{
int c;
struct MacGSocketData* data = _GSocket_Get_Mac_Socket(socket);
if (!data) return;
switch (event)
{
case GSOCK_CONNECTION:
if(socket->m_server)
c = kCFSocketReadCallBack;
else
c = kCFSocketConnectCallBack;
break;
case GSOCK_LOST:
case GSOCK_INPUT:
c = kCFSocketReadCallBack;
break;
case GSOCK_OUTPUT:
c = kCFSocketWriteCallBack;
break;
default:
c = 0;
wxFAIL_MSG( "unknown GSocketEvent" );
return 0;
}
CFSocketEnableCallBacks(data->socket, c);
}
void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket, GSocketEvent event)
void GSocketCFManager::Install_Callback(GSocket *socket, GSocketEvent event)
{
int c;
struct MacGSocketData* data = _GSocket_Get_Mac_Socket(socket);
if (!data) return;
switch (event)
{
case GSOCK_CONNECTION:
if(socket->m_server)
c = kCFSocketReadCallBack;
else
c = kCFSocketConnectCallBack;
break;
case GSOCK_LOST:
case GSOCK_INPUT:
c = kCFSocketReadCallBack;
break;
case GSOCK_OUTPUT:
c = kCFSocketWriteCallBack;
break;
default:
c = 0;
}
CFSocketDisableCallBacks(data->socket, c);
const MacGSocketData * const data = GetInitializedData(socket);
if ( !data )
return;
CFSocketEnableCallBacks(data->GetSocket(), GetCFCallback(socket, event));
}
void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
void GSocketCFManager::Uninstall_Callback(GSocket *socket, GSocketEvent event)
{
struct MacGSocketData* data = _GSocket_Get_Mac_Socket(socket);
if (!data) return;
const MacGSocketData * const data = GetInitializedData(socket);
if ( !data )
return;
CFRunLoopAddSource(s_mainRunLoop, data->source, kCFRunLoopCommonModes);
CFSocketDisableCallBacks(data->GetSocket(), GetCFCallback(socket, event));
}
void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
void GSocketCFManager::Enable_Events(GSocket *socket)
{
struct MacGSocketData* data = _GSocket_Get_Mac_Socket(socket);
if (!data) return;
const MacGSocketData * const data = GetInitializedData(socket);
if ( !data )
return;
/* CFSocketInvalidate does CFRunLoopRemoveSource anyway */
CFRunLoopRemoveSource(s_mainRunLoop, data->source, kCFRunLoopCommonModes);
CFSocketInvalidate(data->socket);
CFRunLoopAddSource(ms_mainRunLoop, data->GetSource(), kCFRunLoopCommonModes);
}
void GSocketCFManager::Disable_Events(GSocket *socket)
{
const MacGSocketData * const data = GetInitializedData(socket);
if ( !data )
return;
// CFSocketInvalidate does CFRunLoopRemoveSource anyway
CFRunLoopRemoveSource(ms_mainRunLoop, data->GetSource(), kCFRunLoopCommonModes);
CFSocketInvalidate(data->GetSocket());
// CFSocketInvalidate has closed the socket so we want to make sure GSocket knows this
socket->m_fd = -1 /*INVALID_SOCKET*/;
socket->m_fd = -1;
}
GSocketManager *wxAppTraits::GetSocketManager()
{
static GSocketCFManager s_manager;
return &s_manager;
};
#endif // wxUSE_SOCKETS

View File

@@ -1,22 +1,24 @@
/////////////////////////////////////////////////////////////////////////////
// Name: src/motif/gsockmot.cpp
// Project: GSocket (Generic Socket) for WX
// Purpose: GSocket: Motif part
// CVSID: $Id$
///////////////////////////////////////////////////////////////////////////////
// Name: motif/gsockmot.cpp
// Purpose: implementation of wxMotif-specific socket event handling
// Author: Guilhem Lavaux, Vadim Zeitlin
// Created: 1999
// RCS-ID: $Id$
// Copyright: (c) 1999, 2007 wxWidgets dev team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_SOCKETS
#include <stdlib.h>
#include <X11/Intrinsic.h>
#include <X11/Intrinsic.h> // XtAppAdd/RemoveInput()
#include "wx/motif/private.h" // wxGetAppContext()
#include "wx/gsocket.h"
#include "wx/unix/gsockunx.h"
#include "wx/apptrait.h"
extern "C" XtAppContext wxGetAppContext();
extern "C" {
static void _GSocket_Motif_Input(XtPointer data, int *WXUNUSED(fid),
XtInputId *WXUNUSED(id))
@@ -34,109 +36,35 @@ static void _GSocket_Motif_Output(XtPointer data, int *WXUNUSED(fid),
socket->Detected_Write();
}
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
{
return true;
}
bool GSocketGUIFunctionsTableConcrete::OnInit(void)
class MotifSocketManager : public GSocketInputBasedManager
{
return 1;
}
void GSocketGUIFunctionsTableConcrete::OnExit(void)
{
}
bool GSocketGUIFunctionsTableConcrete::Init_Socket(GSocket *socket)
{
int *m_id;
socket->m_gui_dependent = (char *)malloc(sizeof(int)*2);
m_id = (int *)(socket->m_gui_dependent);
m_id[0] = -1;
m_id[1] = -1;
return true;
}
void GSocketGUIFunctionsTableConcrete::Destroy_Socket(GSocket *socket)
{
free(socket->m_gui_dependent);
}
void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket, GSocketEvent event)
{
int *m_id = (int *)(socket->m_gui_dependent);
int c;
if (socket->m_fd == -1)
return;
switch (event)
public:
virtual int AddInput(GSocket *socket, SocketDir d)
{
case GSOCK_LOST: /* fall-through */
case GSOCK_INPUT: c = 0; break;
case GSOCK_OUTPUT: c = 1; break;
case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
default: return;
return XtAppAddInput
(
wxGetAppContext(),
socket->m_fd,
(XtPointer)(d == FD_OUTPUT ? XtInputWriteMask
: XtInputReadMask),
d == FD_OUTPUT ? _GSocket_Motif_Output
: _GSocket_Motif_Input,
socket
);
}
if (m_id[c] != -1)
XtRemoveInput(m_id[c]);
if (c == 0)
virtual void RemoveInput(int fd)
{
m_id[0] = XtAppAddInput(wxGetAppContext(), socket->m_fd,
(XtPointer *)XtInputReadMask,
(XtInputCallbackProc) _GSocket_Motif_Input,
(XtPointer) socket);
XtRemoveInput(fd);
}
else
{
m_id[1] = XtAppAddInput(wxGetAppContext(), socket->m_fd,
(XtPointer *)XtInputWriteMask,
(XtInputCallbackProc) _GSocket_Motif_Output,
(XtPointer) socket);
}
}
};
void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket, GSocketEvent event)
GSocketManager *wxGUIAppTraits::GetSocketManager()
{
int *m_id = (int *)(socket->m_gui_dependent);
int c;
switch (event)
{
case GSOCK_LOST: /* fall-through */
case GSOCK_INPUT: c = 0; break;
case GSOCK_OUTPUT: c = 1; break;
case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
default: return;
}
if (m_id[c] != -1)
XtRemoveInput(m_id[c]);
m_id[c] = -1;
static MotifSocketManager s_manager;
return &s_manager;
}
void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
{
Install_Callback(socket, GSOCK_INPUT);
Install_Callback(socket, GSOCK_OUTPUT);
}
void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
{
Uninstall_Callback(socket, GSOCK_INPUT);
Uninstall_Callback(socket, GSOCK_OUTPUT);
}
#else /* !wxUSE_SOCKETS */
/* some compilers don't like having empty source files */
static int wxDummyGsockVar = 0;
#endif /* wxUSE_SOCKETS/!wxUSE_SOCKETS */
#endif // wxUSE_SOCKETS

View File

@@ -41,6 +41,8 @@
// wxAppTraits implementation
// ============================================================================
GSocketManager *wxAppTraits::ms_manager = NULL;
WXDWORD wxAppTraits::DoSimpleWaitForThread(WXHANDLE hThread)
{
return ::WaitForSingleObject((HANDLE)hThread, INFINITE);

View File

@@ -332,7 +332,7 @@ bool wxConsoleEventLoop::Dispatch()
}
else
{
wxLogDebug(_T("Ignoring unexpected message %d"), msg.message);
::DispatchMessage(&msg);
}
return !m_shouldExit;

View File

@@ -53,24 +53,13 @@
#include <winsock.h>
#ifndef __GSOCKET_STANDALONE__
# include "wx/platform.h"
#endif
#include "wx/platform.h"
#if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__)
#if wxUSE_SOCKETS
#ifndef __GSOCKET_STANDALONE__
# include "wx/msw/gsockmsw.h"
# include "wx/gsocket.h"
#else
# include "gsockmsw.h"
# include "gsocket.h"
#endif /* __GSOCKET_STANDALONE__ */
#include "wx/gsocket.h"
#ifndef __WXWINCE__
#include <assert.h>
#else
#define assert(x)
#ifdef __WXWINCE__
#ifndef isdigit
#define isdigit(x) (x > 47 && x < 58)
#endif
@@ -94,69 +83,23 @@ typedef struct sockaddr_storage wxSockAddr;
typedef struct sockaddr wxSockAddr;
#endif
/* Table of GUI-related functions. We must call them indirectly because
* of wxBase and GUI separation: */
static GSocketGUIFunctionsTable *gs_gui_functions;
class GSocketGUIFunctionsTableNull: 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);
};
bool GSocketGUIFunctionsTableNull::OnInit()
{ return true; }
void GSocketGUIFunctionsTableNull::OnExit()
{}
bool GSocketGUIFunctionsTableNull::CanUseEventLoop()
{ return false; }
bool GSocketGUIFunctionsTableNull::Init_Socket(GSocket *WXUNUSED(socket))
{ return true; }
void GSocketGUIFunctionsTableNull::Destroy_Socket(GSocket *WXUNUSED(socket))
{}
void GSocketGUIFunctionsTableNull::Enable_Events(GSocket *WXUNUSED(socket))
{}
void GSocketGUIFunctionsTableNull::Disable_Events(GSocket *WXUNUSED(socket))
{}
/* Global initialisers */
void GSocket_SetGUIFunctions(GSocketGUIFunctionsTable *guifunc)
{
gs_gui_functions = guifunc;
}
int GSocket_Init(void)
bool GSocket_Init()
{
WSADATA wsaData;
if (!gs_gui_functions)
{
static GSocketGUIFunctionsTableNull table;
gs_gui_functions = &table;
}
if ( !gs_gui_functions->OnInit() )
{
return 0;
}
GSocketManager * const manager = GSocketManager::Get();
if ( !manager || !manager->OnInit() )
return false;
/* Initialize WinSocket */
return (WSAStartup((1 << 8) | 1, &wsaData) == 0);
return WSAStartup((1 << 8) | 1, &wsaData) == 0;
}
void GSocket_Cleanup(void)
void GSocket_Cleanup()
{
if (gs_gui_functions)
{
gs_gui_functions->OnExit();
}
GSocketManager * const manager = GSocketManager::Get();
if ( manager )
manager->OnExit();
/* Cleanup WinSocket */
WSACleanup();
@@ -189,24 +132,19 @@ GSocket::GSocket()
m_initialRecvBufferSize = -1;
m_initialSendBufferSize = -1;
assert(gs_gui_functions);
/* Per-socket GUI-specific initialization */
m_ok = gs_gui_functions->Init_Socket(this);
m_ok = GSocketManager::Get()->Init_Socket(this);
}
void GSocket::Close()
{
gs_gui_functions->Disable_Events(this);
GSocketManager::Get()->Disable_Events(this);
closesocket(m_fd);
m_fd = INVALID_SOCKET;
}
GSocket::~GSocket()
{
assert(this);
/* Per-socket GUI-specific cleanup */
gs_gui_functions->Destroy_Socket(this);
GSocketManager::Get()->Destroy_Socket(this);
/* Check that the socket is really shutdowned */
if (m_fd != INVALID_SOCKET)
@@ -228,8 +166,6 @@ void GSocket::Shutdown()
{
int evt;
assert(this);
/* If socket has been created, shutdown it */
if (m_fd != INVALID_SOCKET)
{
@@ -262,8 +198,6 @@ void GSocket::Shutdown()
*/
GSocketError GSocket::SetLocal(GAddress *address)
{
assert(this);
/* the socket must be initialized, or it must be a server */
if (m_fd != INVALID_SOCKET && !m_server)
{
@@ -288,8 +222,6 @@ GSocketError GSocket::SetLocal(GAddress *address)
GSocketError GSocket::SetPeer(GAddress *address)
{
assert(this);
/* check address */
if (address == NULL || address->m_family == GSOCK_NOFAMILY)
{
@@ -312,8 +244,6 @@ GAddress *GSocket::GetLocal()
WX_SOCKLEN_T size = sizeof(addr);
GSocketError err;
assert(this);
/* try to get it from the m_local var first */
if (m_local)
return GAddress_copy(m_local);
@@ -350,8 +280,6 @@ GAddress *GSocket::GetLocal()
GAddress *GSocket::GetPeer()
{
assert(this);
/* try to get it from the m_peer var */
if (m_peer)
return GAddress_copy(m_peer);
@@ -375,8 +303,6 @@ GSocketError GSocket::SetServer()
{
u_long arg = 1;
assert(this);
/* must not be in use */
if (m_fd != INVALID_SOCKET)
{
@@ -405,7 +331,7 @@ GSocketError GSocket::SetServer()
}
ioctlsocket(m_fd, FIONBIO, (u_long FAR *) &arg);
gs_gui_functions->Enable_Events(this);
GSocketManager::Get()->Enable_Events(this);
/* allow a socket to re-bind if the socket is in the TIME_WAIT
state after being previously closed.
@@ -453,8 +379,6 @@ GSocket *GSocket::WaitConnection()
GSocketError err;
u_long arg = 1;
assert(this);
/* Reenable CONNECTION events */
m_detected &= ~GSOCK_CONNECTION_FLAG;
@@ -517,7 +441,7 @@ GSocket *GSocket::WaitConnection()
}
ioctlsocket(connection->m_fd, FIONBIO, (u_long FAR *) &arg);
gs_gui_functions->Enable_Events(connection);
GSocketManager::Get()->Enable_Events(connection);
return connection;
}
@@ -598,8 +522,6 @@ GSocketError GSocket::Connect(GSocketStream stream)
int ret, err;
u_long arg = 1;
assert(this);
/* Enable CONNECTION events (needed for nonblocking connections) */
m_detected &= ~GSOCK_CONNECTION_FLAG;
@@ -631,7 +553,7 @@ GSocketError GSocket::Connect(GSocketStream stream)
}
ioctlsocket(m_fd, FIONBIO, (u_long FAR *) &arg);
gs_gui_functions->Enable_Events(this);
GSocketManager::Get()->Enable_Events(this);
// If the reuse flag is set, use the applicable socket reuse flag
if (m_reusable)
@@ -716,8 +638,6 @@ GSocketError GSocket::SetNonOriented()
{
u_long arg = 1;
assert(this);
if (m_fd != INVALID_SOCKET)
{
m_error = GSOCK_INVSOCK;
@@ -744,7 +664,7 @@ GSocketError GSocket::SetNonOriented()
}
ioctlsocket(m_fd, FIONBIO, (u_long FAR *) &arg);
gs_gui_functions->Enable_Events(this);
GSocketManager::Get()->Enable_Events(this);
if (m_reusable)
{
@@ -780,8 +700,6 @@ int GSocket::Read(char *buffer, int size)
{
int ret;
assert(this);
/* Reenable INPUT events */
m_detected &= ~GSOCK_INPUT_FLAG;
@@ -820,8 +738,6 @@ int GSocket::Write(const char *buffer, int size)
{
int ret;
assert(this);
if (m_fd == INVALID_SOCKET || m_server)
{
m_error = GSOCK_INVSOCK;
@@ -866,107 +782,7 @@ int GSocket::Write(const char *buffer, int size)
*/
GSocketEventFlags GSocket::Select(GSocketEventFlags flags)
{
if (!gs_gui_functions->CanUseEventLoop())
{
GSocketEventFlags result = 0;
fd_set readfds;
fd_set writefds;
fd_set exceptfds;
assert(this);
FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_ZERO(&exceptfds);
FD_SET(m_fd, &readfds);
if (flags & GSOCK_OUTPUT_FLAG || flags & GSOCK_CONNECTION_FLAG)
FD_SET(m_fd, &writefds);
FD_SET(m_fd, &exceptfds);
/* Check 'sticky' CONNECTION flag first */
result |= (GSOCK_CONNECTION_FLAG & m_detected);
/* If we have already detected a LOST event, then don't try
* to do any further processing.
*/
if ((m_detected & GSOCK_LOST_FLAG) != 0)
{
m_establishing = false;
return (GSOCK_LOST_FLAG & flags);
}
/* Try select now */
if (select(m_fd + 1, &readfds, &writefds, &exceptfds,
&m_timeout) <= 0)
{
/* What to do here? */
return (result & flags);
}
/* Check for exceptions and errors */
if (FD_ISSET(m_fd, &exceptfds))
{
m_establishing = false;
m_detected = GSOCK_LOST_FLAG;
/* LOST event: Abort any further processing */
return (GSOCK_LOST_FLAG & flags);
}
/* Check for readability */
if (FD_ISSET(m_fd, &readfds))
{
result |= GSOCK_INPUT_FLAG;
if (m_server && m_stream)
{
/* This is a TCP server socket that detected a connection.
While the INPUT_FLAG is also set, it doesn't matter on
this kind of sockets, as we can only Accept() from them. */
result |= GSOCK_CONNECTION_FLAG;
m_detected |= GSOCK_CONNECTION_FLAG;
}
}
/* Check for writability */
if (FD_ISSET(m_fd, &writefds))
{
if (m_establishing && !m_server)
{
int error;
WX_SOCKLEN_T len = sizeof(error);
m_establishing = false;
getsockopt(m_fd, SOL_SOCKET, SO_ERROR, (char*)&error, &len);
if (error)
{
m_detected = GSOCK_LOST_FLAG;
/* LOST event: Abort any further processing */
return (GSOCK_LOST_FLAG & flags);
}
else
{
result |= GSOCK_CONNECTION_FLAG;
m_detected |= GSOCK_CONNECTION_FLAG;
}
}
else
{
result |= GSOCK_OUTPUT_FLAG;
}
}
return (result & flags);
}
else /* USE_GUI() */
{
assert(this);
return flags & m_detected;
}
}
/* Attributes */
@@ -977,8 +793,6 @@ GSocketEventFlags GSocket::Select(GSocketEventFlags flags)
*/
void GSocket::SetNonBlocking(bool non_block)
{
assert(this);
m_non_blocking = non_block;
}
@@ -988,8 +802,6 @@ void GSocket::SetNonBlocking(bool non_block)
*/
void GSocket::SetTimeout(unsigned long millis)
{
assert(this);
m_timeout.tv_sec = (millis / 1000);
m_timeout.tv_usec = (millis % 1000) * 1000;
}
@@ -1001,8 +813,6 @@ void GSocket::SetTimeout(unsigned long millis)
*/
GSocketError WXDLLIMPEXP_NET GSocket::GetError()
{
assert(this);
return m_error;
}
@@ -1041,8 +851,6 @@ void GSocket::SetCallback(GSocketEventFlags flags,
{
int count;
assert(this);
for (count = 0; count < GSOCK_MAX_EVENT; count++)
{
if ((flags & (1 << count)) != 0)
@@ -1061,8 +869,6 @@ void GSocket::UnsetCallback(GSocketEventFlags flags)
{
int count;
assert(this);
for (count = 0; count < GSOCK_MAX_EVENT; count++)
{
if ((flags & (1 << count)) != 0)
@@ -1236,7 +1042,7 @@ int GSocket::Send_Dgram(const char *buffer, int size)
}
/* Compatibility functions for GSocket */
GSocket *GSocket_new(void)
GSocket *GSocket_new()
{
GSocket *newsocket = new GSocket();
if(newsocket->IsOk())
@@ -1284,7 +1090,7 @@ GSocket *GSocket_new(void)
}
GAddress *GAddress_new(void)
GAddress *GAddress_new()
{
GAddress *address;
@@ -1302,8 +1108,6 @@ GAddress *GAddress_copy(GAddress *address)
{
GAddress *addr2;
assert(address != NULL);
if ((addr2 = (GAddress *) malloc(sizeof(GAddress))) == NULL)
return NULL;
@@ -1325,8 +1129,6 @@ GAddress *GAddress_copy(GAddress *address)
void GAddress_destroy(GAddress *address)
{
assert(address != NULL);
if (address->m_addr)
free(address->m_addr);
@@ -1335,15 +1137,11 @@ void GAddress_destroy(GAddress *address)
void GAddress_SetFamily(GAddress *address, GAddressType type)
{
assert(address != NULL);
address->m_family = type;
}
GAddressType GAddress_GetFamily(GAddress *address)
{
assert(address != NULL);
return address->m_family;
}
@@ -1437,8 +1235,6 @@ GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname)
struct hostent *he;
struct in_addr *addr;
assert(address != NULL);
CHECK_ADDRESS(address, INET);
addr = &(((struct sockaddr_in *)address->m_addr)->sin_addr);
@@ -1478,8 +1274,6 @@ GSocketError GAddress_INET_SetHostAddress(GAddress *address,
{
struct in_addr *addr;
assert(address != NULL);
CHECK_ADDRESS(address, INET);
addr = &(((struct sockaddr_in *)address->m_addr)->sin_addr);
@@ -1494,7 +1288,6 @@ GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port,
struct servent *se;
struct sockaddr_in *addr;
assert(address != NULL);
CHECK_ADDRESS(address, INET);
if (!port)
@@ -1530,7 +1323,6 @@ GSocketError GAddress_INET_SetPort(GAddress *address, unsigned short port)
{
struct sockaddr_in *addr;
assert(address != NULL);
CHECK_ADDRESS(address, INET);
addr = (struct sockaddr_in *)address->m_addr;
@@ -1545,7 +1337,6 @@ GSocketError GAddress_INET_GetHostName(GAddress *address, char *hostname, size_t
char *addr_buf;
struct sockaddr_in *addr;
assert(address != NULL);
CHECK_ADDRESS(address, INET);
addr = (struct sockaddr_in *)address->m_addr;
@@ -1567,7 +1358,6 @@ unsigned long GAddress_INET_GetHostAddress(GAddress *address)
{
struct sockaddr_in *addr;
assert(address != NULL);
CHECK_ADDRESS_RETVAL(address, INET, 0);
addr = (struct sockaddr_in *)address->m_addr;
@@ -1579,7 +1369,6 @@ unsigned short GAddress_INET_GetPort(GAddress *address)
{
struct sockaddr_in *addr;
assert(address != NULL);
CHECK_ADDRESS_RETVAL(address, INET, 0);
addr = (struct sockaddr_in *)address->m_addr;
@@ -1621,7 +1410,6 @@ GSocketError _GAddress_Init_INET6(GAddress *address)
GSocketError GAddress_INET6_SetHostName(GAddress *address, const char *hostname)
{
assert(address != NULL);
CHECK_ADDRESS(address, INET6);
addrinfo hints;
@@ -1641,8 +1429,6 @@ GSocketError GAddress_INET6_SetHostName(GAddress *address, const char *hostname)
GSocketError GAddress_INET6_SetAnyAddress(GAddress *address)
{
assert(address != NULL);
CHECK_ADDRESS(address, INET6);
struct in6_addr addr;
@@ -1652,8 +1438,6 @@ GSocketError GAddress_INET6_SetAnyAddress(GAddress *address)
GSocketError GAddress_INET6_SetHostAddress(GAddress *address,
struct in6_addr hostaddr)
{
assert(address != NULL);
CHECK_ADDRESS(address, INET6);
((struct sockaddr_in6 *)address->m_addr)->sin6_addr = hostaddr;
@@ -1667,7 +1451,6 @@ GSocketError GAddress_INET6_SetPortName(GAddress *address, const char *port,
struct servent *se;
struct sockaddr_in6 *addr;
assert(address != NULL);
CHECK_ADDRESS(address, INET6);
if (!port)
@@ -1703,7 +1486,6 @@ GSocketError GAddress_INET6_SetPort(GAddress *address, unsigned short port)
{
struct sockaddr_in6 *addr;
assert(address != NULL);
CHECK_ADDRESS(address, INET6);
addr = (struct sockaddr_in6 *)address->m_addr;
@@ -1718,7 +1500,6 @@ GSocketError GAddress_INET6_GetHostName(GAddress *address, char *hostname, size_
char *addr_buf;
struct sockaddr_in6 *addr;
assert(address != NULL);
CHECK_ADDRESS(address, INET6);
addr = (struct sockaddr_in6 *)address->m_addr;
@@ -1738,8 +1519,6 @@ GSocketError GAddress_INET6_GetHostName(GAddress *address, char *hostname, size_
GSocketError GAddress_INET6_GetHostAddress(GAddress *address,struct in6_addr *hostaddr)
{
assert(address != NULL);
assert(hostaddr != NULL);
CHECK_ADDRESS_RETVAL(address, INET6, GSOCK_INVADDR);
*hostaddr = ( (struct sockaddr_in6 *)address->m_addr )->sin6_addr;
return GSOCK_NOERROR;
@@ -1747,7 +1526,6 @@ GSocketError GAddress_INET6_GetHostAddress(GAddress *address,struct in6_addr *ho
unsigned short GAddress_INET6_GetPort(GAddress *address)
{
assert(address != NULL);
CHECK_ADDRESS_RETVAL(address, INET6, 0);
return ntohs( ((struct sockaddr_in6 *)address->m_addr)->sin6_port );
@@ -1763,31 +1541,20 @@ unsigned short GAddress_INET6_GetPort(GAddress *address)
GSocketError _GAddress_Init_UNIX(GAddress *address)
{
assert (address != NULL);
address->m_error = GSOCK_INVADDR;
return GSOCK_INVADDR;
}
GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *WXUNUSED(path))
{
assert (address != NULL);
address->m_error = GSOCK_INVADDR;
return GSOCK_INVADDR;
}
GSocketError GAddress_UNIX_GetPath(GAddress *address, char *WXUNUSED(path), size_t WXUNUSED(sbuf))
{
assert (address != NULL);
address->m_error = GSOCK_INVADDR;
return GSOCK_INVADDR;
}
#else /* !wxUSE_SOCKETS */
/*
* Translation unit shouldn't be empty, so include this typedef to make the
* compiler (VC++ 6.0, for example) happy
*/
typedef void (*wxDummy)();
#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */
#endif // wxUSE_SOCKETS

View File

@@ -16,6 +16,8 @@
#pragma hdrstop
#endif
#if wxUSE_SOCKETS
/*
* DONE: for WinCE we need to replace WSAAsyncSelect
* (Windows message-based notification of network events for a socket)
@@ -34,54 +36,13 @@
# pragma warning(disable:4115) /* named type definition in parentheses */
#endif
/* This needs to be before the wx/defs/h inclusion
* for some reason
*/
#ifdef __WXWINCE__
/* windows.h results in tons of warnings at max warning level */
# ifdef _MSC_VER
# pragma warning(push, 1)
# endif
# include <windows.h>
# ifdef _MSC_VER
# pragma warning(pop)
# pragma warning(disable:4514)
# endif
#endif
#ifndef __GSOCKET_STANDALONE__
# include "wx/platform.h"
#endif
#if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__)
#ifndef __GSOCKET_STANDALONE__
#include "wx/msw/gsockmsw.h"
#include "wx/gsocket.h"
#include "wx/apptrait.h"
extern "C" WXDLLIMPEXP_BASE HINSTANCE wxGetInstance(void);
extern "C" WXDLLIMPEXP_BASE HINSTANCE wxGetInstance();
#define INSTANCE wxGetInstance()
#else /* __GSOCKET_STANDALONE__ */
#include "gsockmsw.h"
#include "gsocket.h"
/* If not using wxWidgets, a global var called hInst must
* be available and it must contain the app's instance
* handle.
*/
extern HINSTANCE hInst;
#define INSTANCE hInst
#endif /* !__GSOCKET_STANDALONE__/__GSOCKET_STANDALONE__ */
#ifndef __WXWINCE__
#include <assert.h>
#else
#define assert(x)
#ifdef __WXWINCE__
#include <winsock.h>
#include "wx/msw/wince/net.h"
#include "wx/hashmap.h"
@@ -125,7 +86,7 @@ typedef struct _WSANETWORKEVENTS {
long lNetworkEvents;
int iErrorCode[10];
} WSANETWORKEVENTS, FAR * LPWSANETWORKEVENTS;
typedef HANDLE (PASCAL *WSACreateEventFunc)(void);
typedef HANDLE (PASCAL *WSACreateEventFunc)();
typedef int (PASCAL *WSAEventSelectFunc)(SOCKET,HANDLE,long);
typedef int (PASCAL *WSAWaitForMultipleEventsFunc)(long,HANDLE,BOOL,long,BOOL);
typedef int (PASCAL *WSAEnumNetworkEventsFunc)(SOCKET,HANDLE,LPWSANETWORKEVENTS);
@@ -210,15 +171,29 @@ DWORD WINAPI SocketThread(LPVOID data)
}
#endif
// ----------------------------------------------------------------------------
// MSW implementation of GSocketManager
// ----------------------------------------------------------------------------
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
class GSocketMSWManager : public GSocketManager
{
return true;
}
public:
virtual bool OnInit();
virtual void OnExit();
virtual bool Init_Socket(GSocket *socket);
virtual void Destroy_Socket(GSocket *socket);
virtual void Install_Callback(GSocket *socket, GSocketEvent event);
virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event);
virtual void Enable_Events(GSocket *socket);
virtual void Disable_Events(GSocket *socket);
};
/* Global initializers */
bool GSocketGUIFunctionsTableConcrete::OnInit()
bool GSocketMSWManager::OnInit()
{
static LPCTSTR pclassname = NULL;
int i;
@@ -280,7 +255,7 @@ bool GSocketGUIFunctionsTableConcrete::OnInit()
return true;
}
void GSocketGUIFunctionsTableConcrete::OnExit()
void GSocketMSWManager::OnExit()
{
#ifdef __WXWINCE__
/* Delete the threads here */
@@ -304,7 +279,7 @@ void GSocketGUIFunctionsTableConcrete::OnExit()
/* Per-socket GUI initialization / cleanup */
bool GSocketGUIFunctionsTableConcrete::Init_Socket(GSocket *socket)
bool GSocketMSWManager::Init_Socket(GSocket *socket)
{
int i;
@@ -331,7 +306,7 @@ bool GSocketGUIFunctionsTableConcrete::Init_Socket(GSocket *socket)
return true;
}
void GSocketGUIFunctionsTableConcrete::Destroy_Socket(GSocket *socket)
void GSocketMSWManager::Destroy_Socket(GSocket *socket)
{
/* Remove the socket from the list */
EnterCriticalSection(&critical);
@@ -340,6 +315,18 @@ void GSocketGUIFunctionsTableConcrete::Destroy_Socket(GSocket *socket)
LeaveCriticalSection(&critical);
}
void GSocketMSWManager::Install_Callback(GSocket * WXUNUSED(socket),
GSocketEvent WXUNUSED(event))
{
wxFAIL_MSG( _T("not used under MSW") );
}
void GSocketMSWManager::Uninstall_Callback(GSocket * WXUNUSED(socket),
GSocketEvent WXUNUSED(event))
{
wxFAIL_MSG( _T("not used under MSW") );
}
/* Windows proc for asynchronous event handling */
LRESULT CALLBACK _GSocket_Internal_WinProc(HWND hWnd,
@@ -416,10 +403,8 @@ LRESULT CALLBACK _GSocket_Internal_WinProc(HWND hWnd,
* events for internal processing, but we will only notify users
* when an appropiate callback function has been installed.
*/
void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
void GSocketMSWManager::Enable_Events(GSocket *socket)
{
assert (socket != NULL);
if (socket->m_fd != INVALID_SOCKET)
{
/* We could probably just subscribe to all events regardless
@@ -449,10 +434,8 @@ void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
/* _GSocket_Disable_Events:
* Disable event notifications (when shutdowning the socket)
*/
void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
void GSocketMSWManager::Disable_Events(GSocket *socket)
{
assert (socket != NULL);
if (socket->m_fd != INVALID_SOCKET)
{
#ifndef __WXWINCE__
@@ -464,12 +447,17 @@ void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
}
}
#else /* !wxUSE_SOCKETS */
// set the wxBase variable to point to our GSocketManager implementation
//
// see comments in wx/msw/apptbase.h for the explanation of why do we do it
// like this
static struct ManagerSetter
{
ManagerSetter()
{
static GSocketMSWManager s_manager;
wxAppTraits::SetDefaultSocketManager(&s_manager);
}
} gsm_managerSetter;
/*
* Translation unit shouldn't be empty, so include this typedef to make the
* compiler (VC++ 6.0, for example) happy
*/
typedef void (*wxDummy)();
#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */
#endif // wxUSE_SOCKETS

View File

@@ -31,34 +31,6 @@ static void _GSocket_PM_Output(void *data)
socket->Detected_Write();
}
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
{ return true; }
bool GSocketGUIFunctionsTableConcrete::OnInit(void)
{
return 1;
}
void GSocketGUIFunctionsTableConcrete::OnExit(void)
{
}
bool GSocketGUIFunctionsTableConcrete::Init_Socket(GSocket *socket)
{
int *m_id;
socket->m_gui_dependent = (char *)malloc(sizeof(int)*2);
m_id = (int *)(socket->m_gui_dependent);
m_id[0] = -1;
m_id[1] = -1;
return true;
}
void GSocketGUIFunctionsTableConcrete::Destroy_Socket(GSocket *socket)
{
free(socket->m_gui_dependent);
}
void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket, GSocketEvent event)
{
int *m_id = (int *)(socket->m_gui_dependent);

View File

@@ -33,6 +33,7 @@
#include "wx/apptrait.h"
#include "wx/unix/execute.h"
#include "wx/evtloop.h"
#include "wx/gsocket.h"
#include "wx/unix/private/timer.h"

View File

@@ -82,7 +82,8 @@ wxEpollDispatcher *wxEpollDispatcher::Create()
wxLogSysError(_("Failed to create epoll descriptor"));
return NULL;
}
wxLogTrace(wxEpollDispatcher_Trace,
_T("Epoll fd %d created"), epollDescriptor);
return new wxEpollDispatcher(epollDescriptor);
}
@@ -115,6 +116,8 @@ bool wxEpollDispatcher::RegisterFD(int fd, wxFDIOHandler* handler, int flags)
return false;
}
wxLogTrace(wxEpollDispatcher_Trace,
_T("Added fd %d (handler %p) to epoll %d"), fd, handler, m_epollDescriptor);
return true;
}
@@ -134,6 +137,8 @@ bool wxEpollDispatcher::ModifyFD(int fd, wxFDIOHandler* handler, int flags)
return false;
}
wxLogTrace(wxEpollDispatcher_Trace,
_T("Modified fd %d (handler: %p) on epoll %d"), fd, handler, m_epollDescriptor);
return true;
}
@@ -148,7 +153,8 @@ bool wxEpollDispatcher::UnregisterFD(int fd)
wxLogSysError(_("Failed to unregister descriptor %d from epoll descriptor %d"),
fd, m_epollDescriptor);
}
wxLogTrace(wxEpollDispatcher_Trace,
_T("removed fd %d from %d"), fd, m_epollDescriptor);
return true;
}

View File

@@ -21,6 +21,7 @@
#ifndef __GSOCKET_STANDALONE__
#include "wx/defs.h"
#include "wx/private/gsocketiohandler.h"
#include "wx/thread.h" // for wxThread::IsMain() used in assert
#endif
#if defined(__VISAGECPP__)
@@ -459,65 +460,17 @@ typedef struct sockaddr wxSockAddr;
/* Table of GUI-related functions. We must call them indirectly because
* of wxBase and GUI separation: */
static GSocketGUIFunctionsTable *gs_gui_functions;
class GSocketGUIFunctionsTableNull: public GSocketGUIFunctionsTable
bool GSocket_Init()
{
public:
virtual bool OnInit();
virtual void OnExit();
virtual bool CanUseEventLoop();
virtual bool Init_Socket(GSocket *socket);
virtual void Destroy_Socket(GSocket *socket);
virtual void Install_Callback(GSocket *socket, GSocketEvent event);
virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event);
virtual void Enable_Events(GSocket *socket);
virtual void Disable_Events(GSocket *socket);
};
bool GSocketGUIFunctionsTableNull::OnInit()
{ return true; }
void GSocketGUIFunctionsTableNull::OnExit()
{}
bool GSocketGUIFunctionsTableNull::CanUseEventLoop()
{ return false; }
bool GSocketGUIFunctionsTableNull::Init_Socket(GSocket *WXUNUSED(socket))
{ return true; }
void GSocketGUIFunctionsTableNull::Destroy_Socket(GSocket *WXUNUSED(socket))
{}
void GSocketGUIFunctionsTableNull::Install_Callback(GSocket *WXUNUSED(socket), GSocketEvent WXUNUSED(event))
{}
void GSocketGUIFunctionsTableNull::Uninstall_Callback(GSocket *WXUNUSED(socket), GSocketEvent WXUNUSED(event))
{}
void GSocketGUIFunctionsTableNull::Enable_Events(GSocket *WXUNUSED(socket))
{}
void GSocketGUIFunctionsTableNull::Disable_Events(GSocket *WXUNUSED(socket))
{}
/* Global initialisers */
void GSocket_SetGUIFunctions(GSocketGUIFunctionsTable *guifunc)
{
gs_gui_functions = guifunc;
GSocketManager * const manager = GSocketManager::Get();
return manager && manager->OnInit();
}
int GSocket_Init(void)
void GSocket_Cleanup()
{
if (!gs_gui_functions)
{
static GSocketGUIFunctionsTableNull table;
gs_gui_functions = &table;
}
if ( !gs_gui_functions->OnInit() )
return 0;
return 1;
}
void GSocket_Cleanup(void)
{
if (gs_gui_functions)
{
gs_gui_functions->OnExit();
}
GSocketManager * const manager = GSocketManager::Get();
if ( manager )
manager->OnExit();
}
/* Constructors / Destructors for GSocket */
@@ -547,17 +500,17 @@ GSocket::GSocket()
m_timeout = 10*60*1000;
/* 10 minutes * 60 sec * 1000 millisec */
m_establishing = false;
m_use_events = false;
m_initialRecvBufferSize = -1;
m_initialSendBufferSize = -1;
assert(gs_gui_functions);
/* Per-socket GUI-specific initialization */
m_ok = gs_gui_functions->Init_Socket(this);
m_ok = GSocketManager::Get()->Init_Socket(this);
}
void GSocket::Close()
{
gs_gui_functions->Disable_Events(this);
if (m_use_events)
DisableEvents();
/* When running on OS X, the gsockosx implementation of GSocketGUIFunctionsTable
will close the socket during Disable_Events. However, it will only do this
@@ -580,8 +533,7 @@ GSocket::~GSocket()
if (m_fd != INVALID_SOCKET)
Shutdown();
/* Per-socket GUI-specific cleanup */
gs_gui_functions->Destroy_Socket(this);
GSocketManager::Get()->Destroy_Socket(this);
delete m_handler;
@@ -591,6 +543,7 @@ GSocket::~GSocket()
if (m_peer)
GAddress_destroy(m_peer);
}
/* GSocket_Shutdown:
@@ -604,7 +557,8 @@ void GSocket::Shutdown()
assert(this);
/* Don't allow events to fire after socket has been closed */
gs_gui_functions->Disable_Events(this);
if (m_use_events)
DisableEvents();
/* If socket has been created, shutdown it */
if (m_fd != INVALID_SOCKET)
@@ -788,7 +742,8 @@ GSocketError GSocket::SetServer()
#endif
ioctl(m_fd, FIONBIO, &arg);
gs_gui_functions->Enable_Events(this);
if (m_use_events)
EnableEvents();
/* allow a socket to re-bind if the socket is in the TIME_WAIT
state after being previously closed.
@@ -907,11 +862,30 @@ GSocket *GSocket::WaitConnection()
#else
ioctl(connection->m_fd, FIONBIO, &arg);
#endif
gs_gui_functions->Enable_Events(connection);
if (m_use_events)
connection->Notify(true);
return connection;
}
void GSocket::Notify(bool flag)
{
if (flag == m_use_events)
return;
// it is not safe to attach or detach i/o descriptor in child thread
wxASSERT_MSG( wxThread::IsMain(), "should be called in main thread only" );
m_use_events = flag;
EnableEvents(flag);
}
void GSocket::EnableEvents(bool flag)
{
if (flag)
GSocketManager::Get()->Enable_Events(this);
else
GSocketManager::Get()->Disable_Events(this);
}
bool GSocket::SetReusable()
{
/* socket must not be null, and must not be in use/already bound */
@@ -1049,8 +1023,8 @@ GSocketError GSocket::Connect(GSocketStream stream)
* call to Enable_Events now.
*/
if (m_non_blocking || ret == 0)
gs_gui_functions->Enable_Events(this);
if (m_use_events && (m_non_blocking || ret == 0))
EnableEvents();
if (ret == -1)
{
@@ -1075,8 +1049,8 @@ GSocketError GSocket::Connect(GSocketStream stream)
SOCKOPTLEN_T len = sizeof(error);
getsockopt(m_fd, SOL_SOCKET, SO_ERROR, (char*) &error, &len);
gs_gui_functions->Enable_Events(this);
if (m_use_events)
EnableEvents();
if (!error)
return GSOCK_NOERROR;
@@ -1156,7 +1130,8 @@ GSocketError GSocket::SetNonOriented()
#else
ioctl(m_fd, FIONBIO, &arg);
#endif
gs_gui_functions->Enable_Events(this);
if (m_use_events)
EnableEvents();
if (m_reusable)
{
@@ -1228,10 +1203,13 @@ int GSocket::Read(char *buffer, int size)
if (ret == 0)
{
/* Make sure wxSOCKET_LOST event gets sent and shut down the socket */
if (m_use_events)
{
m_detected = GSOCK_LOST_FLAG;
Detected_Read();
return 0;
}
}
else if (ret == -1)
{
if ((errno == EWOULDBLOCK) || (errno == EAGAIN))
@@ -1314,116 +1292,9 @@ int GSocket::Write(const char *buffer, int size)
*/
GSocketEventFlags GSocket::Select(GSocketEventFlags flags)
{
if (!gs_gui_functions->CanUseEventLoop())
{
GSocketEventFlags result = 0;
fd_set readfds;
fd_set writefds;
fd_set exceptfds;
struct timeval tv;
assert(this);
if (m_fd == -1)
return (GSOCK_LOST_FLAG & flags);
/* Do not use a static struct, Linux can garble it */
tv.tv_sec = m_timeout / 1000;
tv.tv_usec = (m_timeout % 1000) * 1000;
wxFD_ZERO(&readfds);
wxFD_ZERO(&writefds);
wxFD_ZERO(&exceptfds);
wxFD_SET(m_fd, &readfds);
if (flags & GSOCK_OUTPUT_FLAG || flags & GSOCK_CONNECTION_FLAG)
wxFD_SET(m_fd, &writefds);
wxFD_SET(m_fd, &exceptfds);
/* Check 'sticky' CONNECTION flag first */
result |= (GSOCK_CONNECTION_FLAG & m_detected);
/* If we have already detected a LOST event, then don't try
* to do any further processing.
*/
if ((m_detected & GSOCK_LOST_FLAG) != 0)
{
m_establishing = false;
return (GSOCK_LOST_FLAG & flags);
}
/* Try select now */
if (select(m_fd + 1, &readfds, &writefds, &exceptfds, &tv) <= 0)
{
/* What to do here? */
return (result & flags);
}
/* Check for exceptions and errors */
if (wxFD_ISSET(m_fd, &exceptfds))
{
m_establishing = false;
m_detected = GSOCK_LOST_FLAG;
/* LOST event: Abort any further processing */
return (GSOCK_LOST_FLAG & flags);
}
/* Check for readability */
if (wxFD_ISSET(m_fd, &readfds))
{
result |= GSOCK_INPUT_FLAG;
if (m_server && m_stream)
{
/* This is a TCP server socket that detected a connection.
While the INPUT_FLAG is also set, it doesn't matter on
this kind of sockets, as we can only Accept() from them. */
result |= GSOCK_CONNECTION_FLAG;
m_detected |= GSOCK_CONNECTION_FLAG;
}
}
/* Check for writability */
if (wxFD_ISSET(m_fd, &writefds))
{
if (m_establishing && !m_server)
{
int error;
SOCKOPTLEN_T len = sizeof(error);
m_establishing = false;
getsockopt(m_fd, SOL_SOCKET, SO_ERROR, (char*)&error, &len);
if (error)
{
m_detected = GSOCK_LOST_FLAG;
/* LOST event: Abort any further processing */
return (GSOCK_LOST_FLAG & flags);
}
else
{
result |= GSOCK_CONNECTION_FLAG;
m_detected |= GSOCK_CONNECTION_FLAG;
}
}
else
{
result |= GSOCK_OUTPUT_FLAG;
}
}
return (result & flags);
}
else
{
assert(this);
return flags & m_detected;
}
}
/* Flags */
@@ -1558,14 +1429,20 @@ GSocketError GSocket::SetSockOpt(int level, int optname,
void GSocket::Enable(GSocketEvent event)
{
if (m_use_events)
{
m_detected &= ~(1 << event);
gs_gui_functions->Install_Callback(this, event);
GSocketManager::Get()->Install_Callback(this, event);
}
}
void GSocket::Disable(GSocketEvent event)
{
if (m_use_events)
{
m_detected |= (1 << event);
gs_gui_functions->Uninstall_Callback(this, event);
GSocketManager::Get()->Uninstall_Callback(this, event);
}
}
/* _GSocket_Input_Timeout:

View File

@@ -329,6 +329,7 @@ wx/xtistrm.h
wx/zipstrm.h
wx/zstream.h
wx/private/fdiodispatcher.h
wx/private/gsocketiohandler.h
wx/private/selectdispatcher.h
wx/unix/app.h
wx/unix/apptbase.h

View File

@@ -234,6 +234,7 @@ wx/xtistrm.h
wx/zipstrm.h
wx/zstream.h
wx/private/fdiodispatcher.h
wx/private/gsocketiohandler.h
wx/private/selectdispatcher.h
wx/unix/app.h
wx/unix/apptbase.h

View File

@@ -258,6 +258,7 @@ wx/xtistrm.h
wx/zipstrm.h
wx/zstream.h
wx/private/fdiodispatcher.h
wx/private/gsocketiohandler.h
wx/private/selectdispatcher.h
wx/unix/app.h
wx/unix/apptbase.h