Initial commit: ROW Client source code

Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-29 16:24:34 +09:00
commit e067522598
5135 changed files with 1745744 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,204 @@
# Microsoft Developer Studio Project File - Name="DataRelay" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=DataRelay - 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 "datarelay.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 "datarelay.mak" CFG="DataRelay - Win32 Debug Unicode"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "DataRelay - Win32 Debug Unicode" (based on "Win32 (x86) Application")
!MESSAGE "DataRelay - Win32 Release Unicode" (based on "Win32 (x86) Application")
!MESSAGE "DataRelay - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "DataRelay - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "DataRelay - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "..\..\common\include" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "WIN32" /D "_WIN32_DCOM" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /machine:I386 /stack:0x10000,0x10000
!ELSEIF "$(CFG)" == "DataRelay - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\common\include" /D "_WINDOWS" /D "_DEBUG" /D "WIN32" /D "_WIN32_DCOM" /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"LIBC" /pdbtype:sept /stack:0x10000,0x10000
# SUBTRACT LINK32 /incremental:no /nodefaultlib
!ELSEIF "$(CFG)" == "DataRelay - Win32 Debug Unicode"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Win32_Debug_Unicode"
# PROP BASE Intermediate_Dir "Win32_Debug_Unicode"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Win32_Debug_Unicode"
# PROP Intermediate_Dir "Win32_Debug_Unicode"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\common\include" /D "_WINDOWS" /D "_DEBUG" /D "WIN32" /D "_WIN32_DCOM" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\common\include" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D "_WIN32_DCOM" /D "UNICODE" /D "_UNICODE" /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"LIBC" /pdbtype:sept
# SUBTRACT BASE LINK32 /incremental:no /nodefaultlib
# ADD LINK32 dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"LIBC" /pdbtype:sept /stack:0x10000,0x10000
# SUBTRACT LINK32 /incremental:no /nodefaultlib
!ELSEIF "$(CFG)" == "DataRelay - Win32 Release Unicode"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Win32_Release_Unicode"
# PROP BASE Intermediate_Dir "Win32_Release_Unicode"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Win32_Release_Unicode"
# PROP Intermediate_Dir "Win32_Release_Unicode"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "." /I "..\..\common\include" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "WIN32" /D "_WIN32_DCOM" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "..\..\common\include" /D "NDEBUG" /D "_MBCS" /D "_WINDOWS" /D "WIN32" /D "_WIN32_DCOM" /D "UNICODE" /D "_UNICODE" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /machine:I386 /stack:0x10000,0x10000
!ENDIF
# Begin Target
# Name "DataRelay - Win32 Release"
# Name "DataRelay - Win32 Debug"
# Name "DataRelay - Win32 Debug Unicode"
# Name "DataRelay - Win32 Release Unicode"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\DataRelay.cpp
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\DataRelay.rc
# End Source File
# Begin Source File
SOURCE=.\directx.ico
# End Source File
# Begin Source File
SOURCE=.\resource.h
# End Source File
# End Group
# Begin Group "Common"
# PROP Default_Filter ""
# Begin Source File
SOURCE=..\..\common\src\dxutil.cpp
# End Source File
# Begin Source File
SOURCE=..\..\common\include\dxutil.h
# End Source File
# Begin Source File
SOURCE=..\..\common\src\NetConnect.cpp
# End Source File
# Begin Source File
SOURCE=..\..\common\include\NetConnect.h
# End Source File
# Begin Source File
SOURCE=..\..\common\include\netconnectres.h
# End Source File
# End Group
# Begin Source File
SOURCE=.\readme.txt
# End Source File
# End Target
# End Project

View File

@@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "DataRelay"=.\datarelay.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -0,0 +1,378 @@
# Microsoft Developer Studio Generated NMAKE File, Based on datarelay.dsp
!IF "$(CFG)" == ""
CFG=DataRelay - Win32 Debug Unicode
!MESSAGE No configuration specified. Defaulting to DataRelay - Win32 Debug Unicode.
!ENDIF
!IF "$(CFG)" != "DataRelay - Win32 Release" && "$(CFG)" != "DataRelay - Win32 Debug" && "$(CFG)" != "DataRelay - Win32 Debug Unicode" && "$(CFG)" != "DataRelay - Win32 Release Unicode"
!MESSAGE Invalid configuration "$(CFG)" specified.
!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 "datarelay.mak" CFG="DataRelay - Win32 Debug Unicode"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "DataRelay - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "DataRelay - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE "DataRelay - Win32 Debug Unicode" (based on "Win32 (x86) Application")
!MESSAGE "DataRelay - Win32 Release Unicode" (based on "Win32 (x86) Application")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
!IF "$(CFG)" == "DataRelay - Win32 Release"
OUTDIR=.\Release
INTDIR=.\Release
# Begin Custom Macros
OutDir=.\Release
# End Custom Macros
ALL : "$(OUTDIR)\datarelay.exe"
CLEAN :
-@erase "$(INTDIR)\DataRelay.obj"
-@erase "$(INTDIR)\DataRelay.res"
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\NetConnect.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(OUTDIR)\datarelay.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "." /I "..\..\common\include" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "WIN32" /D "_WIN32_DCOM" /Fp"$(INTDIR)\datarelay.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
RSC=rc.exe
RSC_PROJ=/l 0x409 /fo"$(INTDIR)\DataRelay.res" /d "NDEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\datarelay.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\datarelay.pdb" /machine:I386 /out:"$(OUTDIR)\datarelay.exe" /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\DataRelay.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\NetConnect.obj" \
"$(INTDIR)\DataRelay.res"
"$(OUTDIR)\datarelay.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "DataRelay - Win32 Debug"
OUTDIR=.\Debug
INTDIR=.\Debug
# Begin Custom Macros
OutDir=.\Debug
# End Custom Macros
ALL : "$(OUTDIR)\datarelay.exe"
CLEAN :
-@erase "$(INTDIR)\DataRelay.obj"
-@erase "$(INTDIR)\DataRelay.res"
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\NetConnect.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(OUTDIR)\datarelay.exe"
-@erase "$(OUTDIR)\datarelay.ilk"
-@erase "$(OUTDIR)\datarelay.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\common\include" /D "_WINDOWS" /D "_DEBUG" /D "WIN32" /D "_WIN32_DCOM" /Fp"$(INTDIR)\datarelay.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
RSC=rc.exe
RSC_PROJ=/l 0x409 /fo"$(INTDIR)\DataRelay.res" /d "_DEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\datarelay.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\datarelay.pdb" /debug /machine:I386 /nodefaultlib:"LIBC" /out:"$(OUTDIR)\datarelay.exe" /pdbtype:sept /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\DataRelay.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\NetConnect.obj" \
"$(INTDIR)\DataRelay.res"
"$(OUTDIR)\datarelay.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "DataRelay - Win32 Debug Unicode"
OUTDIR=.\Win32_Debug_Unicode
INTDIR=.\Win32_Debug_Unicode
# Begin Custom Macros
OutDir=.\Win32_Debug_Unicode
# End Custom Macros
ALL : "$(OUTDIR)\datarelay.exe"
CLEAN :
-@erase "$(INTDIR)\DataRelay.obj"
-@erase "$(INTDIR)\DataRelay.res"
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\NetConnect.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(OUTDIR)\datarelay.exe"
-@erase "$(OUTDIR)\datarelay.ilk"
-@erase "$(OUTDIR)\datarelay.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\common\include" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D "_WIN32_DCOM" /D "UNICODE" /D "_UNICODE" /Fp"$(INTDIR)\datarelay.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
RSC=rc.exe
RSC_PROJ=/l 0x409 /fo"$(INTDIR)\DataRelay.res" /d "_DEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\datarelay.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\datarelay.pdb" /debug /machine:I386 /nodefaultlib:"LIBC" /out:"$(OUTDIR)\datarelay.exe" /pdbtype:sept /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\DataRelay.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\NetConnect.obj" \
"$(INTDIR)\DataRelay.res"
"$(OUTDIR)\datarelay.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "DataRelay - Win32 Release Unicode"
OUTDIR=.\Win32_Release_Unicode
INTDIR=.\Win32_Release_Unicode
# Begin Custom Macros
OutDir=.\Win32_Release_Unicode
# End Custom Macros
ALL : "$(OUTDIR)\datarelay.exe"
CLEAN :
-@erase "$(INTDIR)\DataRelay.obj"
-@erase "$(INTDIR)\DataRelay.res"
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\NetConnect.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(OUTDIR)\datarelay.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "." /I "..\..\common\include" /D "NDEBUG" /D "_MBCS" /D "_WINDOWS" /D "WIN32" /D "_WIN32_DCOM" /D "UNICODE" /D "_UNICODE" /Fp"$(INTDIR)\datarelay.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
RSC=rc.exe
RSC_PROJ=/l 0x409 /fo"$(INTDIR)\DataRelay.res" /d "NDEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\datarelay.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=dplay.lib dxguid.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib kernel32.lib user32.lib ole32.lib uuid.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\datarelay.pdb" /machine:I386 /out:"$(OUTDIR)\datarelay.exe" /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\DataRelay.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\NetConnect.obj" \
"$(INTDIR)\DataRelay.res"
"$(OUTDIR)\datarelay.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ENDIF
!IF "$(NO_EXTERNAL_DEPS)" != "1"
!IF EXISTS("datarelay.dep")
!INCLUDE "datarelay.dep"
!ELSE
!MESSAGE Warning: cannot find "datarelay.dep"
!ENDIF
!ENDIF
!IF "$(CFG)" == "DataRelay - Win32 Release" || "$(CFG)" == "DataRelay - Win32 Debug" || "$(CFG)" == "DataRelay - Win32 Debug Unicode" || "$(CFG)" == "DataRelay - Win32 Release Unicode"
SOURCE=.\DataRelay.cpp
"$(INTDIR)\DataRelay.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\DataRelay.rc
"$(INTDIR)\DataRelay.res" : $(SOURCE) "$(INTDIR)"
$(RSC) $(RSC_PROJ) $(SOURCE)
SOURCE=..\..\common\src\dxutil.cpp
"$(INTDIR)\dxutil.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\common\src\NetConnect.cpp
"$(INTDIR)\NetConnect.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF

View File

@@ -0,0 +1,225 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_MULTIPLAYER_CONNECT DIALOG DISCARDABLE 0, 0, 282, 151
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Multiplayer Connect"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Player Name:",IDC_STATIC,7,10,43,8
EDITTEXT IDC_PLAYER_NAME_EDIT,7,22,268,14,ES_AUTOHSCROLL
LTEXT "Connection Type:",IDC_STATIC,7,41,57,8
LISTBOX IDC_CONNECTION_LIST,7,53,268,72,LBS_SORT |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
DEFPUSHBUTTON "OK",IDOK,171,130,50,14
PUSHBUTTON "Cancel",IDCANCEL,225,130,50,14
END
IDD_MULTIPLAYER_GAMES DIALOG DISCARDABLE 0, 0, 282, 140
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Multiplayer Games"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Select Game To Join:",-1,7,15,69,8
CONTROL "Start Search",IDC_SEARCH_CHECK,"Button",BS_AUTOCHECKBOX |
BS_PUSHLIKE | WS_TABSTOP,220,7,55,14
LISTBOX IDC_GAMES_LIST,7,24,268,91,LBS_SORT |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Join",IDC_JOIN,7,119,50,14
PUSHBUTTON "Create",IDC_CREATE,61,119,50,14
PUSHBUTTON "Cancel",IDC_BACK,225,119,50,14
END
IDD_MAIN_GAME DIALOGEX 0, 0, 343, 258
STYLE DS_LOCALEDIT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE |
WS_CAPTION | WS_SYSMENU
CAPTION "Data Relay"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Number of players in session:",IDC_STATIC,11,27,95,8
LTEXT "0",IDC_NUM_PLAYERS,107,27,54,8
GROUPBOX "Game Status",IDC_STATIC,7,7,329,33
LTEXT "Local Player Name:",IDC_STATIC,11,17,62,8
LTEXT "Test Player",IDC_PLAYER_NAME,76,17,84,8
PUSHBUTTON "Exit",IDCANCEL,270,19,50,14
GROUPBOX "Send",IDC_STATIC,7,43,128,84
COMBOBOX IDC_SEND_TARGET_COMBO,57,54,73,140,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
RTEXT "Target:",IDC_STATIC,11,56,43,8
RTEXT "Rate (ms):",IDC_STATIC,11,90,43,8
COMBOBOX IDC_SEND_RATE_COMBO,57,88,73,85,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_SEND_SIZE_COMBO,57,71,73,77,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
RTEXT "Size (bytes):",IDC_STATIC,11,73,43,8
GROUPBOX "Log",IDC_STATIC,7,161,329,88
EDITTEXT IDC_LOG_EDIT,14,173,314,71,ES_MULTILINE | ES_READONLY
CONTROL "Push to Send",IDC_SEND_READY,"Button",BS_AUTOCHECKBOX |
BS_PUSHLIKE | WS_DISABLED | WS_TABSTOP,200,19,65,14
GROUPBOX "Statistics",IDC_STATIC,7,128,127,32
RTEXT "Total Send Rate:",IDC_STATIC,13,137,65,8
RTEXT "Total Recieve Rate:",IDC_STATIC,13,145,65,8
LTEXT "0.0 BPS",IDC_ACTUAL_SEND_RATE,82,137,50,8
LTEXT "0.0 BPS",IDC_ACTUAL_RECIEVE_RATE,82,146,49,8
COMBOBOX IDC_SEND_TIMEOUT_COMBO,57,105,73,140,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
RTEXT "Timeout (ms):",IDC_STATIC,11,107,43,8
GROUPBOX "Connection Info",IDC_CONNINFO,142,43,194,117
EDITTEXT IDC_CONNINFO_EDIT,150,71,177,83,ES_MULTILINE |
ES_READONLY | WS_VSCROLL
COMBOBOX IDC_CONNINFO_COMBO,224,53,73,85,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
RTEXT "Info Target:",IDC_STATIC,176,55,43,8,0,WS_EX_RIGHT
END
IDD_LOBBY_WAIT_STATUS DIALOG DISCARDABLE 120, 110, 162, 52
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "Lobby Connection Status"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "&Cancel",IDCANCEL,55,31,51,14
CTEXT "Finding Game...",IDC_WAIT_TEXT,7,14,141,8
END
IDD_MULTIPLAYER_CREATE DIALOG DISCARDABLE 0, 0, 186, 77
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Create Game"
FONT 8, "MS Shell Dlg"
BEGIN
EDITTEXT IDC_EDIT_SESSION_NAME,7,19,172,14,ES_AUTOHSCROLL
DEFPUSHBUTTON "OK",IDOK,7,56,50,14
PUSHBUTTON "Cancel",IDCANCEL,129,56,50,14
LTEXT "Game Name:",IDC_STATIC,7,7,42,8
CONTROL "Migrate Host",IDC_MIGRATE_HOST,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,66,40,56,10
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_MULTIPLAYER_CONNECT, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 275
TOPMARGIN, 7
BOTTOMMARGIN, 144
END
IDD_MULTIPLAYER_GAMES, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 275
VERTGUIDE, 141
TOPMARGIN, 7
BOTTOMMARGIN, 133
END
IDD_MAIN_GAME, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 336
TOPMARGIN, 7
BOTTOMMARGIN, 251
END
IDD_LOBBY_WAIT_STATUS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 148
TOPMARGIN, 7
BOTTOMMARGIN, 45
END
IDD_MULTIPLAYER_CREATE, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 179
VERTGUIDE, 94
TOPMARGIN, 7
BOTTOMMARGIN, 70
END
END
#endif // APSTUDIO_INVOKED
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_MAIN ICON DISCARDABLE "directx.ico"
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,126 @@
//-----------------------------------------------------------------------------
//
// Sample Name: DataRelay Sample
//
// Copyright (c) 1999-2001 Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
Description
===========
The DataRelay is similar to SimplePeer but differs by sending a single
target (or everyone) a packet of data with options specified in the
dialog's UI. It uses a worker thread to process received data, and
uses the ReturnBuffer() API so that no copying of the received buffers
is done.
Path
====
Source: DXSDK\Samples\Multimedia\DirectPlay\DataRelay
Executable: DXSDK\Samples\Multimedia\DirectPlay\Bin
User's Guide
============
Host or connect to a session in the same manner as explained in SimplePeer.
When the main dialog appears select the target, size, rate, and timeout values.
Then click "Push to Send". This will send a packet of data to the target as
the rate specified with the specified size. Use the "Connection Info" dropdown
to specify a target to gather connection info on periodically.
Programming Notes
=================
The DataRelay sample is very similar in form to the SimplePeer sample. For
detailed programming notes on the basics this sample, refer to Programming
Notes section of the SimplePeer sample.
The DataRelay differs by sending a single target (or everyone) a packet of
data with options specified in the dialog's UI.
When the "Push to Send" button is clicked, then win32 timer is created
that goes off every number of ms according to the UI.
* Upon the WM_TIMER labeled TIMERID_NETWORK, it calls SendNetworkData().
1. It creates a app defined struct, GAMEMSG_DATA_xxx on the heap.
The struct derives from GAMEMSG_GENERIC. GAMEMSG_GENERIC contains a
packet type field so that the reciever and identify this app defined
packet, and it contains a packet ID field. This field is sequential
and is displayed to the user whenever a packet is received. The struct
is created on the heap, since will use the DPNSEND_NOCOPY when calling
SendTo() below. The struct is filled with random data, however a real
app would typically send player and world state data here.
2. It then creates a GAMEMSG_DATA_NODE which is then handed off to the
app worker thread. That thread will process the node, and
then update the UI to show that a packet was sent. It is handed off
by adding the node to a linked list. Since the worker thread also
accesses the linked list, we enter a critical section before adding the
node and leave it afterward.
3. A DPN_BUFFER_DESC is then filled out passing in a pointer to the
app defined struct created above.
4. IDirectPlay8Peer::SendTo is called passing in the DPN_BUFFER_DESC, thereby
sending the app defined struct, GAMEMSG_DATA_xxx. We call SendTo with
the flags DPNSEND_NOLOOPBACK | DPNSEND_NOCOPY. DPNSEND_NOLOOPBACK tells
DirectPlay to not to send the buffer to us, and DPNSEND_NOCOPY means that
DirectPlay should not copy the buffer. When the DPNSEND_NOCOPY is used,
the app itself owns the buffer, and the buffer must be on the heap.
When the DPN_MSGID_SEND_COMPLETE comes in, we will delete the buffer.
5. The event, g_hDPDataAvailEvent, is set telling the worker thread that
there is data (a message to say that a packet was sent), is ready to
be processed now.
* Handle DirectPlay system messages. See DirectPlayMessageHandler()
The DataRelay handles the typical messages as described in the
SimplePeer programming notes, and in addition:
- Upon DPN_MSGID_RECEIVE
1. It casts the pReceiveMsg->pReceiveData to a GAMEMSG_GENERIC*.
2. It then switches off the GAMEMSG_GENERIC's dwType.
3. If its a GAME_MSGID_GAMEPACKET, then it creates and fills out
a GAMEMSG_DATA_NODE. This node is then handed to a worker thread
so it can be processed outside of the DirectPlay message handler.
This is important since it keeps the DirectPlay threads working at
full speed.
4. After the node is added to the linked list using a critical section
to lock, it returns DPNSUCCESS_PENDING. This is important since
it tells DirectPlay that ownership of the buffer
has been transferred to the application, and so DirectPlay will
neither free nor modify it until ownership is returned
to DirectPlay through the ReturnBuffer() call.
- Upon DPN_MSGID_SEND_COMPLETE
1. It checks the pSendCompleteMsg->hResultCode for DPNERR_TIMEDOUT.
2. If this occurs then it creates a new GAMEMSG_DATA_NODE with dwType
set to DATA_TYPE_NETPACKET_TIMEOUT. This will is passed to the
worker thread. The worker thread will process this node, and
post a message to the dialog saying that the message timed out.
A realistic application would want to take the appropriate steps here,
such as resending new data or other measures.
3. It deletes the buffer from the heap since we specified, DPNSEND_NOCOPY,
so the buffer on the heap belows the app and it must clean it up.
* The worker thread. See ProcessNetDataProc()
- Upon the g_hDPDataAvailEvent
1. When the event is signaled, then new data can be found in the
linked list, g_DataHead. So it calls ProcessData().
2. ProcessData() first enters the critical section, g_csDataList, so
that the other threads don't modify the linked list while it is
processing data. It leaves this critical section at the end of the
loop. Typically better locking mechanisms would be used so that the
other threads (as well as the DirectPlay message handler threads)
aren't blocked while data is processed on this thread.
3. It runs through the linked list, processing each node. For this
simple sample all it does is posting a message to the dialog thread,
containing a string for the dialog to display.
4. After it is done processing the node, it calls
IDirectPlay8Peer::ReturnBuffer() so that DirectPlay can free
buffer that it passed us in DPN_MSGID_RECEIVE.

View File

@@ -0,0 +1,44 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by DataRelay.rc
//
#define IDD_MAIN_GAME 101
#define IDC_NUM_PLAYERS 1002
#define IDC_PLAYER_NAME 1003
#define IDC_SEND_TARGET_COMBO 1012
#define IDC_SEND_RATE_COMBO 1013
#define IDC_SEND_SIZE_COMBO 1014
#define IDC_SEND_TIMEOUT_COMBO 1015
#define IDC_LOG_EDIT 1016
#define IDC_SEND_READY 1017
#define IDC_ACTUAL_SEND_RATE 1021
#define IDC_ACTUAL_RECIEVE_RATE 1022
#define IDC_CONNINFO 1023
#define IDC_CONNINFO_EDIT 1024
#define IDC_CONNINFO_COMBO 1025
#define IDD_MULTIPLAYER_CONNECT 10001
#define IDD_MULTIPLAYER_GAMES 10002
#define IDD_MULTIPLAYER_CREATE 10003
#define IDD_LOBBY_WAIT_STATUS 10004
#define IDC_PLAYER_NAME_EDIT 11002
#define IDC_GAMES_LIST 11003
#define IDC_JOIN 11004
#define IDC_CREATE 11005
#define IDC_CONNECTION_LIST 11006
#define IDC_BACK 11007
#define IDC_EDIT_SESSION_NAME 11009
#define IDC_SEARCH_CHECK 11010
#define IDC_WAIT_TEXT 11012
#define IDC_MIGRATE_HOST 11013
#define IDI_MAIN 11014
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 105
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1025
#define _APS_NEXT_SYMED_VALUE 103
#endif
#endif