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

View File

@@ -0,0 +1,63 @@
//----------------------------------------------------------------------------
// File: VoiceClientServer.h
//
// Desc: see voiceclient.cpp
//
// Copyright (c) 1999-2001 Microsoft Corp. All rights reserved.
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Defines, and constants
//-----------------------------------------------------------------------------
#define DPLAY_SAMPLE_KEY TEXT("Software\\Microsoft\\DirectX DirectPlay Samples")
#define MAX_PLAYER_NAME 14
#define WM_APP_DISPLAY_PLAYERS (WM_APP + 0)
#define WM_APP_UPDATE_STATS (WM_APP + 1)
// This GUID allows DirectPlay to find other instances of the same game on
// the network. So it must be unique for every game, and the same for
// every instance of that game. // {AD8EF550-EB5D-49b8-9C13-DC6CCDA33FC5}
GUID g_guidApp = { 0xad8ef550, 0xeb5d, 0x49b8, { 0x9c, 0x13, 0xdc, 0x6c, 0xcd, 0xa3, 0x3f, 0xc5 } };
//-----------------------------------------------------------------------------
// App specific DirectPlay messages and structures
//-----------------------------------------------------------------------------
#define GAME_MSGID_CREATE_PLAYER 1
#define GAME_MSGID_DESTROY_PLAYER 2
#define GAME_MSGID_SET_ID 3
// Change compiler pack alignment to be BYTE aligned, and pop the current value
#pragma pack( push, 1 )
struct GAMEMSG_GENERIC
{
DWORD dwType;
};
struct GAMEMSG_SET_ID : public GAMEMSG_GENERIC
{
DWORD dpnidPlayer; // dpnid of the player
};
struct GAMEMSG_CREATE_PLAYER : public GAMEMSG_GENERIC
{
DWORD dpnidPlayer; // dpnid of the player created
TCHAR strPlayerName[MAX_PLAYER_NAME]; // name of the player created
};
struct GAMEMSG_DESTROY_PLAYER : public GAMEMSG_GENERIC
{
DWORD dpnidPlayer; // dpnid of the player destroyed
};
// Pop the old pack alignment
#pragma pack( pop )

View File

@@ -0,0 +1,221 @@
//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_CLIENT_CONNECT DIALOG DISCARDABLE 0, 0, 282, 167
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:",IDC_STATIC,7,42,69,8
LISTBOX IDC_GAMES_LIST,7,51,268,89,LBS_SORT |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Join",IDC_JOIN,7,146,50,14
PUSHBUTTON "Cancel",IDCANCEL,225,146,50,14
LTEXT "Player Name:",IDC_STATIC,7,10,43,8
EDITTEXT IDC_PLAYER_NAME_EDIT,56,7,219,14,ES_AUTOHSCROLL
LTEXT "IP Address:",IDC_STATIC,7,27,37,8
EDITTEXT IDC_IP_ADDRESS,56,24,75,14,ES_AUTOHSCROLL
CONTROL "Start Search",IDC_SEARCH_CHECK,"Button",BS_AUTOCHECKBOX |
BS_PUSHLIKE | WS_TABSTOP,220,24,55,14
END
IDD_MAIN_GAME DIALOG DISCARDABLE 0, 0, 240, 158
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "VoiceClient"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Number of players in game:",IDC_STATIC,7,17,86,8
LTEXT "0",IDC_NUM_PLAYERS,95,17,53,8
LTEXT "Local Player Name:",IDC_STATIC,7,7,62,8
LTEXT "Static",IDC_PLAYER_NAME,72,7,93,8
PUSHBUTTON "Exit",IDCANCEL,183,137,50,14
CONTROL "List1",IDC_PEOPLE_LIST,"SysListView32",LVS_REPORT |
LVS_SORTASCENDING | LVS_AUTOARRANGE | WS_BORDER |
WS_TABSTOP,8,28,225,104
PUSHBUTTON "&Setup",IDC_SETUP,183,7,50,14
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_VOICE_SETUP DIALOG DISCARDABLE 0, 0, 284, 159
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "DirectPlayVoice Configuration"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Client Options (adjust any time)",-1,7,7,270,124
GROUPBOX "Playback Volume",-1,15,17,81,55,WS_GROUP
CONTROL "Default",IDC_PLAYBACK_DEFAULT,"Button",
BS_AUTORADIOBUTTON,23,27,39,10
CONTROL "Set",IDC_PLAYBACK_SET,"Button",BS_AUTORADIOBUTTON,63,27,
27,10
CONTROL "Slider1",IDC_PLAYBACK_SLIDER,"msctls_trackbar32",
TBS_NOTICKS | WS_TABSTOP,21,47,70,11
LTEXT "Min",-1,25,58,12,8
LTEXT "Max",-1,73,58,14,8
GROUPBOX "Record Volume",-1,102,17,81,55,WS_GROUP
CONTROL "Auto",IDC_RECORD_AUTO,"Button",BS_AUTORADIOBUTTON,110,
27,31,10
CONTROL "Default",IDC_RECORD_DEFAULT,"Button",BS_AUTORADIOBUTTON,
142,27,39,10
CONTROL "Set",IDC_RECORD_SET,"Button",BS_AUTORADIOBUTTON,130,37,
27,10
CONTROL "Slider1",IDC_RECORD_SLIDER,"msctls_trackbar32",
TBS_NOTICKS | WS_TABSTOP,108,47,70,11
LTEXT "Min",-1,112,58,12,8
LTEXT "Max",-1,160,58,14,8
GROUPBOX "Threshold",-1,189,17,81,55,WS_GROUP
CONTROL "Auto",IDC_THRESHOLD_AUTO,"Button",BS_AUTORADIOBUTTON,
197,27,31,10
CONTROL "Default",IDC_THRESHOLD_DEFAULT,"Button",
BS_AUTORADIOBUTTON,229,27,39,10
CONTROL "Set",IDC_THRESHOLD_SET,"Button",BS_AUTORADIOBUTTON,
217,37,27,10
CONTROL "Slider1",IDC_THRESHOLD_SLIDER,"msctls_trackbar32",
TBS_NOTICKS | WS_TABSTOP,195,47,70,11
LTEXT "Min",-1,199,58,12,8
LTEXT "Max",-1,247,58,14,8
GROUPBOX "Quality",-1,59,73,81,53,WS_GROUP
CONTROL "Default",IDC_QUALITY_DEFAULT,"Button",
BS_AUTORADIOBUTTON,69,86,39,10
CONTROL "Set",IDC_QUALITY_SET,"Button",BS_AUTORADIOBUTTON,111,86,
27,10
CONTROL "Slider1",IDC_QUALITY_SLIDER,"msctls_trackbar32",
TBS_NOTICKS | WS_TABSTOP,65,100,70,11
LTEXT "Min",-1,69,111,12,8
LTEXT "Max",-1,117,111,14,8
GROUPBOX "Aggressiveness",-1,146,73,81,53,WS_GROUP
CONTROL "Default",IDC_AGGRESSIVENESS_DEFAULT,"Button",
BS_AUTORADIOBUTTON,154,86,39,10
CONTROL "Set",IDC_AGGRESSIVENESS_SET,"Button",BS_AUTORADIOBUTTON,
198,86,27,10
CONTROL "Slider1",IDC_AGGRESSIVENESS_SLIDER,"msctls_trackbar32",
TBS_NOTICKS | WS_TABSTOP,150,100,70,11
LTEXT "Min",-1,154,111,12,8
LTEXT "Max",-1,202,111,14,8
DEFPUSHBUTTON "OK",IDOK,173,137,50,14
PUSHBUTTON "Cancel",IDCANCEL,227,137,50,14
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_CLIENT_CONNECT, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 275
TOPMARGIN, 7
BOTTOMMARGIN, 160
END
IDD_MAIN_GAME, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 233
VERTGUIDE, 60
VERTGUIDE, 120
VERTGUIDE, 180
TOPMARGIN, 7
BOTTOMMARGIN, 151
END
IDD_VOICE_SETUP, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 277
TOPMARGIN, 7
BOTTOMMARGIN, 151
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,18 @@
//-----------------------------------------------------------------------------
//
// Sample Name: VoiceClient Sample
//
// Copyright (c) 1999-2001 Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
Description
===========
The VoiceClientServer sample is a simple Microsoft<66> DirectPlay<61> voice-based client/server application.
Path
====
Source: DXSDK\Samples\Multimedia\DirectPlay\VoiceClientServer\VoiceClient
Executable: DXSDK\Samples\Multimedia\DirectPlay\Bin

View File

@@ -0,0 +1,50 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by VoiceClient.rc
//
#define IDD_MAIN_GAME 101
#define IDD_LOBBY_WAIT_STATUS 105
#define IDD_VOICE_SETUP 108
#define IDC_WAVE 1001
#define IDC_NUM_PLAYERS 1002
#define IDC_PLAYER_NAME 1003
#define IDC_LOG_EDIT 1016
#define IDC_PEOPLE_LIST 1035
#define IDC_SESSIONCOMPRESION_GROUP 1059
#define IDC_SETUP 1062
#define IDC_QUALITY_DEFAULT 1201
#define IDC_QUALITY_SET 1202
#define IDC_QUALITY_SLIDER 1203
#define IDC_AGGRESSIVENESS_DEFAULT 1301
#define IDC_AGGRESSIVENESS_SET 1302
#define IDC_AGGRESSIVENESS_SLIDER 1303
#define IDC_RECORD_DEFAULT 1501
#define IDC_RECORD_SET 1502
#define IDC_RECORD_AUTO 1503
#define IDC_RECORD_SLIDER 1504
#define IDC_THRESHOLD_DEFAULT 1601
#define IDC_THRESHOLD_SET 1602
#define IDC_THRESHOLD_AUTO 1603
#define IDC_THRESHOLD_SLIDER 1604
#define IDC_PLAYBACK_DEFAULT 1701
#define IDC_PLAYBACK_SET 1702
#define IDC_PLAYBACK_SLIDER 1703
#define IDD_CLIENT_CONNECT 12001
#define IDC_PLAYER_NAME_EDIT 12100
#define IDC_GAMES_LIST 12101
#define IDC_JOIN 12102
#define IDC_IP_ADDRESS 12103
#define IDC_SEARCH_CHECK 12104
#define IDC_WAIT_TEXT 12105
#define IDI_MAIN 12200
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 106
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1005
#define _APS_NEXT_SYMED_VALUE 103
#endif
#endif

View File

@@ -0,0 +1,216 @@
# Microsoft Developer Studio Project File - Name="VoiceClient" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=VoiceClient - 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 "voiceclient.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 "voiceclient.mak" CFG="VoiceClient - Win32 Debug Unicode"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "VoiceClient - Win32 Debug Unicode" (based on "Win32 (x86) Application")
!MESSAGE "VoiceClient - Win32 Release Unicode" (based on "Win32 (x86) Application")
!MESSAGE "VoiceClient - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "VoiceClient - 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)" == "VoiceClient - 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 "..\..\..\common\include" /I "..\common" /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 comctl32.lib /nologo /subsystem:windows /machine:I386 /stack:0x10000,0x10000
!ELSEIF "$(CFG)" == "VoiceClient - 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" /I "..\common" /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 comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"LIBC" /pdbtype:sept /stack:0x10000,0x10000
# SUBTRACT LINK32 /incremental:no /nodefaultlib
!ELSEIF "$(CFG)" == "VoiceClient - 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" /I "..\common" /D "_WINDOWS" /D "_DEBUG" /D "WIN32" /D "_WIN32_DCOM" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\common\include" /I "..\common" /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 comctl32.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 comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"LIBC" /pdbtype:sept /stack:0x10000,0x10000
# SUBTRACT LINK32 /incremental:no /nodefaultlib
!ELSEIF "$(CFG)" == "VoiceClient - 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 "..\..\..\common\include" /I "..\common" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "WIN32" /D "_WIN32_DCOM" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\common\include" /I "..\common" /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 comctl32.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 comctl32.lib /nologo /subsystem:windows /machine:I386 /stack:0x10000,0x10000
!ENDIF
# Begin Target
# Name "VoiceClient - Win32 Release"
# Name "VoiceClient - Win32 Debug"
# Name "VoiceClient - Win32 Debug Unicode"
# Name "VoiceClient - Win32 Release Unicode"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\VoiceClient.cpp
# End Source File
# Begin Source File
SOURCE=..\common\VoiceClientserver.h
# 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=.\directx.ico
# End Source File
# Begin Source File
SOURCE=.\resource.h
# End Source File
# Begin Source File
SOURCE=.\VoiceClient.rc
# 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\netclient.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\common\include\netclient.h
# End Source File
# Begin Source File
SOURCE=..\..\..\common\include\netclientres.h
# End Source File
# Begin Source File
SOURCE=..\..\..\common\src\netvoice.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\common\include\NetVoice.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: "VoiceClient"=.\VoiceClient.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -0,0 +1,392 @@
# Microsoft Developer Studio Generated NMAKE File, Based on VoiceClient.dsp
!IF "$(CFG)" == ""
CFG=VoiceClient - Win32 Debug Unicode
!MESSAGE No configuration specified. Defaulting to VoiceClient - Win32 Debug Unicode.
!ENDIF
!IF "$(CFG)" != "VoiceClient - Win32 Release" && "$(CFG)" != "VoiceClient - Win32 Debug" && "$(CFG)" != "VoiceClient - Win32 Debug Unicode" && "$(CFG)" != "VoiceClient - 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 "VoiceClient.mak" CFG="VoiceClient - Win32 Debug Unicode"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "VoiceClient - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "VoiceClient - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE "VoiceClient - Win32 Debug Unicode" (based on "Win32 (x86) Application")
!MESSAGE "VoiceClient - 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)" == "VoiceClient - Win32 Release"
OUTDIR=.\Release
INTDIR=.\Release
# Begin Custom Macros
OutDir=.\Release
# End Custom Macros
ALL : "$(OUTDIR)\VoiceClient.exe"
CLEAN :
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\netclient.obj"
-@erase "$(INTDIR)\netvoice.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\VoiceClient.obj"
-@erase "$(INTDIR)\VoiceClient.res"
-@erase "$(OUTDIR)\VoiceClient.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "..\..\..\common\include" /I "..\common" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "WIN32" /D "_WIN32_DCOM" /Fp"$(INTDIR)\VoiceClient.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)\VoiceClient.res" /d "NDEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\VoiceClient.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 comctl32.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\VoiceClient.pdb" /machine:I386 /out:"$(OUTDIR)\VoiceClient.exe" /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\VoiceClient.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\netclient.obj" \
"$(INTDIR)\netvoice.obj" \
"$(INTDIR)\VoiceClient.res"
"$(OUTDIR)\VoiceClient.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "VoiceClient - Win32 Debug"
OUTDIR=.\Debug
INTDIR=.\Debug
# Begin Custom Macros
OutDir=.\Debug
# End Custom Macros
ALL : "$(OUTDIR)\VoiceClient.exe"
CLEAN :
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\netclient.obj"
-@erase "$(INTDIR)\netvoice.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(INTDIR)\VoiceClient.obj"
-@erase "$(INTDIR)\VoiceClient.res"
-@erase "$(OUTDIR)\VoiceClient.exe"
-@erase "$(OUTDIR)\VoiceClient.ilk"
-@erase "$(OUTDIR)\VoiceClient.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\common\include" /I "..\common" /D "_WINDOWS" /D "_DEBUG" /D "WIN32" /D "_WIN32_DCOM" /Fp"$(INTDIR)\VoiceClient.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)\VoiceClient.res" /d "_DEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\VoiceClient.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 comctl32.lib /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\VoiceClient.pdb" /debug /machine:I386 /nodefaultlib:"LIBC" /out:"$(OUTDIR)\VoiceClient.exe" /pdbtype:sept /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\VoiceClient.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\netclient.obj" \
"$(INTDIR)\netvoice.obj" \
"$(INTDIR)\VoiceClient.res"
"$(OUTDIR)\VoiceClient.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "VoiceClient - Win32 Debug Unicode"
OUTDIR=.\Win32_Debug_Unicode
INTDIR=.\Win32_Debug_Unicode
# Begin Custom Macros
OutDir=.\Win32_Debug_Unicode
# End Custom Macros
ALL : "$(OUTDIR)\VoiceClient.exe"
CLEAN :
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\netclient.obj"
-@erase "$(INTDIR)\netvoice.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(INTDIR)\VoiceClient.obj"
-@erase "$(INTDIR)\VoiceClient.res"
-@erase "$(OUTDIR)\VoiceClient.exe"
-@erase "$(OUTDIR)\VoiceClient.ilk"
-@erase "$(OUTDIR)\VoiceClient.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\common\include" /I "..\common" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D "_WIN32_DCOM" /D "UNICODE" /D "_UNICODE" /Fp"$(INTDIR)\VoiceClient.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)\VoiceClient.res" /d "_DEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\VoiceClient.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 comctl32.lib /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\VoiceClient.pdb" /debug /machine:I386 /nodefaultlib:"LIBC" /out:"$(OUTDIR)\VoiceClient.exe" /pdbtype:sept /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\VoiceClient.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\netclient.obj" \
"$(INTDIR)\netvoice.obj" \
"$(INTDIR)\VoiceClient.res"
"$(OUTDIR)\VoiceClient.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "VoiceClient - Win32 Release Unicode"
OUTDIR=.\Win32_Release_Unicode
INTDIR=.\Win32_Release_Unicode
# Begin Custom Macros
OutDir=.\Win32_Release_Unicode
# End Custom Macros
ALL : "$(OUTDIR)\VoiceClient.exe"
CLEAN :
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\netclient.obj"
-@erase "$(INTDIR)\netvoice.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\VoiceClient.obj"
-@erase "$(INTDIR)\VoiceClient.res"
-@erase "$(OUTDIR)\VoiceClient.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "..\..\..\common\include" /I "..\common" /D "NDEBUG" /D "_MBCS" /D "_WINDOWS" /D "WIN32" /D "_WIN32_DCOM" /D "UNICODE" /D "_UNICODE" /Fp"$(INTDIR)\VoiceClient.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)\VoiceClient.res" /d "NDEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\VoiceClient.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 comctl32.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\VoiceClient.pdb" /machine:I386 /out:"$(OUTDIR)\VoiceClient.exe" /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\VoiceClient.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\netclient.obj" \
"$(INTDIR)\netvoice.obj" \
"$(INTDIR)\VoiceClient.res"
"$(OUTDIR)\VoiceClient.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ENDIF
!IF "$(NO_EXTERNAL_DEPS)" != "1"
!IF EXISTS("VoiceClient.dep")
!INCLUDE "VoiceClient.dep"
!ELSE
!MESSAGE Warning: cannot find "VoiceClient.dep"
!ENDIF
!ENDIF
!IF "$(CFG)" == "VoiceClient - Win32 Release" || "$(CFG)" == "VoiceClient - Win32 Debug" || "$(CFG)" == "VoiceClient - Win32 Debug Unicode" || "$(CFG)" == "VoiceClient - Win32 Release Unicode"
SOURCE=.\VoiceClient.cpp
"$(INTDIR)\VoiceClient.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\VoiceClient.rc
"$(INTDIR)\VoiceClient.res" : $(SOURCE) "$(INTDIR)"
$(RSC) $(RSC_PROJ) $(SOURCE)
SOURCE=..\..\..\common\src\dxutil.cpp
"$(INTDIR)\dxutil.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\..\common\src\netclient.cpp
"$(INTDIR)\netclient.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\..\common\src\netvoice.cpp
"$(INTDIR)\netvoice.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF

View File

@@ -0,0 +1,126 @@
//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_MAIN DIALOG DISCARDABLE 0, 0, 233, 169
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CAPTION "VoiceServer"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Number of players in game:",IDC_STATIC,7,56,86,8
LTEXT "0",IDC_NUM_PLAYERS,97,56,65,8
RTEXT "Session Name:",IDC_STATIC,7,9,66,8
PUSHBUTTON "Exit",IDCANCEL,176,148,50,14
EDITTEXT IDC_SESSION_NAME,78,7,93,12,ES_AUTOHSCROLL
PUSHBUTTON "Start Server",IDC_START,170,52,56,14
LTEXT "Server Status:",IDC_STATIC,7,151,46,8
LTEXT "Static",IDC_STATUS,58,151,95,8
LISTBOX IDC_PLAYER_LIST,7,69,219,76,LBS_SORT |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
RTEXT "Voice Codec:",IDC_STATIC,7,24,66,8
COMBOBOX IDC_COMPRESSION_COMBO,78,22,148,97,CBS_DROPDOWN |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
RTEXT "Voice Session Type:",IDC_STATIC,7,40,66,8
CONTROL "Forwarding",IDC_FORWARDING,"Button",BS_AUTORADIOBUTTON,
78,40,51,10
CONTROL "Mixing",IDC_MIXING,"Button",BS_AUTORADIOBUTTON,135,40,
36,10
RTEXT "Port:",IDC_STATIC,173,9,16,8
EDITTEXT IDC_PORT,192,7,34,12,ES_AUTOHSCROLL | ES_NUMBER
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_MAIN, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 226
TOPMARGIN, 7
BOTTOMMARGIN, 162
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,18 @@
//-----------------------------------------------------------------------------
//
// Sample Name: VoiceServer Sample
//
// Copyright (c) 1999-2001 Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
Description
===========
The VoiceClientServer sample is a simple Microsoft<66> DirectPlay<61> voice-based client/server application.
Path
====
Source: DXSDK\Samples\Multimedia\DirectPlay\VoiceClientServer\\VoiceServer
Executable: DXSDK\Samples\Multimedia\DirectPlay\Bin

View File

@@ -0,0 +1,26 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by VoiceServer.rc
//
#define IDD_MAIN 101
#define IDC_NUM_PLAYERS 1002
#define IDC_SESSION_NAME 1004
#define IDC_START 1005
#define IDC_STATUS 1006
#define IDC_PORT 1007
#define IDC_COMPRESSION_COMBO 1008
#define IDC_FORWARDING 1009
#define IDC_MIXING 1010
#define IDC_PLAYER_LIST 1016
#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 1011
#define _APS_NEXT_SYMED_VALUE 103
#endif
#endif

View File

@@ -0,0 +1,788 @@
//----------------------------------------------------------------------------
// File: VoiceServer.cpp
//
// Desc: The VoiceClientServer sample is a simple DirectPlay
// voice-based client/server application.
//
// Copyright (c) 1999-2001 Microsoft Corp. All rights reserved.
//-----------------------------------------------------------------------------
#define STRICT
#include <windows.h>
#include <basetsd.h>
#include <dplay8.h>
#include <dpaddr.h>
#include <dxerr8.h>
#include <tchar.h>
#include "NetVoice.h"
#include "VoiceClientServer.h"
#include "DXUtil.h"
#include "resource.h"
//-----------------------------------------------------------------------------
// Player context locking defines
//-----------------------------------------------------------------------------
CRITICAL_SECTION g_csPlayerContext;
#define PLAYER_LOCK() EnterCriticalSection( &g_csPlayerContext );
#define PLAYER_ADDREF( pPlayerInfo ) if( pPlayerInfo ) pPlayerInfo->lRefCount++;
#define PLAYER_RELEASE( pPlayerInfo ) if( pPlayerInfo ) { pPlayerInfo->lRefCount--; if( pPlayerInfo->lRefCount <= 0 ) SAFE_DELETE( pPlayerInfo ); } pPlayerInfo = NULL;
#define PLAYER_UNLOCK() LeaveCriticalSection( &g_csPlayerContext );
//-----------------------------------------------------------------------------
// Defines, and constants
//-----------------------------------------------------------------------------
#define VOICESERVER_DEFAULT_PORT 0x6502 // arbitrary port number for this app
struct APP_PLAYER_INFO
{
LONG lRefCount; // Ref count so we can cleanup when all threads
// are done w/ this object
DPNID dpnidPlayer; // DPNID of player
TCHAR strPlayerName[MAX_PLAYER_NAME]; // Player name
};
//-----------------------------------------------------------------------------
// Global variables
//-----------------------------------------------------------------------------
IDirectPlay8Server* g_pDPServer = NULL; // DirectPlay server object
CNetVoice* g_pNetVoice = NULL; // DirectPlay voice helper class
HINSTANCE g_hInst = NULL; // HINST of app
HWND g_hDlg = NULL; // HWND of main dialog
LONG g_lNumberOfActivePlayers = 0; // Number of players currently in game
TCHAR g_strAppName[256] = TEXT("VoiceServer");
TCHAR g_strSessionName[MAX_PATH]; // Session name
DWORD g_dwPort; // Port
HRESULT g_hrDialog; // Exit code for app
BOOL g_bServerStarted = FALSE; // TRUE if the server has started
GUID g_guidDVSessionCT; // GUID for choosen voice compression
//-----------------------------------------------------------------------------
// Function-prototypes
//-----------------------------------------------------------------------------
HRESULT WINAPI DirectPlayMessageHandler( PVOID pvUserContext, DWORD dwMessageId, PVOID pMsgBuffer );
HRESULT CALLBACK DirectPlayVoiceServerMessageHandler( LPVOID lpvUserContext, DWORD dwMessageType, LPVOID lpMessage );
INT_PTR CALLBACK ServerDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam );
HRESULT StartServer( HWND hDlg );
VOID StopServer( HWND hDlg );
VOID DisplayPlayers( HWND hDlg );
HRESULT SendCreatePlayerMsg( APP_PLAYER_INFO* pPlayerInfo, DPNID dpnidTarget );
HRESULT SendWorldStateToNewPlayer( DPNID dpnidPlayer );
HRESULT SendDestroyPlayerMsgToAll( APP_PLAYER_INFO* pPlayerInfo );
HRESULT EnumVoiceCompressionCodecs( HWND hDlg );
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: Entry point for the application. Since we use a simple dialog for
// user interaction we don't need to pump messages.
//-----------------------------------------------------------------------------
INT APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst,
LPSTR pCmdLine, INT nCmdShow )
{
HKEY hDPlaySampleRegKey;
BOOL bConnectSuccess = FALSE;
g_hInst = hInst;
InitializeCriticalSection( &g_csPlayerContext );
// Read persistent state information from registry
RegCreateKeyEx( HKEY_CURRENT_USER, DPLAY_SAMPLE_KEY, 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
&hDPlaySampleRegKey, NULL );
DXUtil_ReadStringRegKey( hDPlaySampleRegKey, TEXT("Session Name"),
g_strSessionName, MAX_PATH, TEXT("TestGame") );
DXUtil_ReadIntRegKey( hDPlaySampleRegKey, TEXT("VoiceServer Port"),
&g_dwPort, VOICESERVER_DEFAULT_PORT );
// Init COM so we can use CoCreateInstance
CoInitializeEx( NULL, COINIT_MULTITHREADED );
// For this sample, we just start a simple dialog box server
g_hrDialog = S_OK;
DialogBox( hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC) ServerDlgProc );
if( FAILED( g_hrDialog ) )
{
if( g_hrDialog == DPNERR_CONNECTIONLOST )
{
MessageBox( NULL, TEXT("The DirectPlay session was lost. ")
TEXT("The server will now quit."),
g_strAppName, MB_OK | MB_ICONERROR );
}
else
{
DXTRACE_ERR( TEXT("DialogBox"), g_hrDialog );
MessageBox( NULL, TEXT("An error occured. ")
TEXT("The server will now quit."),
g_strAppName, MB_OK | MB_ICONERROR );
}
}
DXUtil_WriteStringRegKey( hDPlaySampleRegKey, TEXT("Session Name"), g_strSessionName );
DXUtil_WriteIntRegKey( hDPlaySampleRegKey, TEXT("VoiceServer Port"), g_dwPort );
StopServer( NULL );
RegCloseKey( hDPlaySampleRegKey );
DeleteCriticalSection( &g_csPlayerContext );
CoUninitialize();
return TRUE;
}
//-----------------------------------------------------------------------------
// Name: ServerDlgProc()
// Desc: Handles dialog messages
//-----------------------------------------------------------------------------
INT_PTR CALLBACK ServerDlgProc( HWND hDlg, UINT msg,
WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_INITDIALOG:
{
g_hDlg = hDlg;
// Load and set the icon
HICON hIcon = LoadIcon( g_hInst, MAKEINTRESOURCE( IDI_MAIN ) );
SendMessage( hDlg, WM_SETICON, ICON_BIG, (LPARAM) hIcon ); // Set big icon
SendMessage( hDlg, WM_SETICON, ICON_SMALL, (LPARAM) hIcon ); // Set small icon
SetWindowText( hDlg, TEXT("VoiceServer") );
SetDlgItemText( hDlg, IDC_SESSION_NAME, g_strSessionName );
// Set the port to either a number or blank
if( g_dwPort != 0 )
SetDlgItemInt( hDlg, IDC_PORT, g_dwPort, FALSE );
else
SetDlgItemText( hDlg, IDC_PORT, TEXT("") );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Server stoped.") );
EnumVoiceCompressionCodecs( hDlg );
CheckRadioButton( hDlg, IDC_FORWARDING, IDC_MIXING, IDC_FORWARDING );
PostMessage( hDlg, WM_APP_UPDATE_STATS, 0, 0 );
break;
}
case WM_APP_UPDATE_STATS:
{
// Update the number of players in the game
TCHAR strNumberPlayers[32];
wsprintf( strNumberPlayers, TEXT("%d"), g_lNumberOfActivePlayers );
SetDlgItemText( hDlg, IDC_NUM_PLAYERS, strNumberPlayers );
DisplayPlayers( hDlg );
break;
}
case WM_COMMAND:
{
switch( LOWORD(wParam) )
{
case IDC_START:
if( !g_bServerStarted )
{
if( FAILED( g_hrDialog = StartServer( hDlg ) ) )
{
DXTRACE_ERR( TEXT("StartServer"), g_hrDialog );
EndDialog( hDlg, 0 );
}
}
else
{
StopServer( hDlg );
}
// Update the UI
if( g_bServerStarted )
SetDlgItemText( hDlg, IDC_START, TEXT("Stop Server") );
else
SetDlgItemText( hDlg, IDC_START, TEXT("Start Server") );
EnableWindow( GetDlgItem( hDlg, IDC_SESSION_NAME ), !g_bServerStarted );
EnableWindow( GetDlgItem( hDlg, IDC_COMPRESSION_COMBO ), !g_bServerStarted );
EnableWindow( GetDlgItem( hDlg, IDC_FORWARDING ), !g_bServerStarted );
EnableWindow( GetDlgItem( hDlg, IDC_MIXING ), !g_bServerStarted );
EnableWindow( GetDlgItem( hDlg, IDC_PORT ), !g_bServerStarted );
break;
case IDCANCEL:
StopServer( hDlg );
EndDialog( hDlg, 0 );
return TRUE;
}
break;
}
}
return FALSE; // Didn't handle message
}
//-----------------------------------------------------------------------------
// Name: EnumVoiceCompressionCodecs()
// Desc: Asks DirectPlay Voice what voice compression codecs are availible
// and fills the combo box thier names and GUIDs.
//-----------------------------------------------------------------------------
HRESULT EnumVoiceCompressionCodecs( HWND hDlg )
{
LPDIRECTPLAYVOICECLIENT pVoiceClient = NULL;
LPDVCOMPRESSIONINFO pdvCompressionInfo = NULL;
LPGUID pGuid = NULL;
LPBYTE pBuffer = NULL;
DWORD dwSize = 0;
DWORD dwNumElements = 0;
HWND hPulldown = GetDlgItem( hDlg, IDC_COMPRESSION_COMBO );
HRESULT hr;
LONG lIndex;
LONG lFirst;
CoInitializeEx( NULL, COINIT_MULTITHREADED );
if( FAILED( hr = CoCreateInstance( CLSID_DirectPlayVoiceClient, NULL,
CLSCTX_INPROC_SERVER, IID_IDirectPlayVoiceClient,
(VOID**) &pVoiceClient ) ) )
return DXTRACE_ERR( TEXT("CoCreateInstance"), hr );
hr = pVoiceClient->GetCompressionTypes( pBuffer, &dwSize, &dwNumElements, 0 );
if( hr != DVERR_BUFFERTOOSMALL && FAILED(hr) )
return DXTRACE_ERR( TEXT("GetCompressionTypes"), hr );
pBuffer = new BYTE[dwSize];
if( FAILED( hr = pVoiceClient->GetCompressionTypes( pBuffer, &dwSize,
&dwNumElements, 0 ) ) )
return DXTRACE_ERR( TEXT("GetCompressionTypes"), hr );
SAFE_RELEASE( pVoiceClient );
CoUninitialize();
pdvCompressionInfo = (LPDVCOMPRESSIONINFO) pBuffer;
for( DWORD dwIndex = 0; dwIndex < dwNumElements; dwIndex++ )
{
TCHAR strName[MAX_PATH];
DXUtil_ConvertWideStringToGeneric( strName,
pdvCompressionInfo[dwIndex].lpszName );
lIndex = (LONG)SendMessage( hPulldown, CB_ADDSTRING, 0, (LPARAM) strName );
pGuid = new GUID;
(*pGuid) = pdvCompressionInfo[dwIndex].guidType;
SendMessage( hPulldown, CB_SETITEMDATA, lIndex, (LPARAM) pGuid );
if( pdvCompressionInfo[dwIndex].guidType == DPVCTGUID_SC03 )
lFirst = lIndex;
}
SAFE_DELETE_ARRAY( pBuffer );
SendMessage( hPulldown, CB_SETCURSEL, lFirst, 0 );
return S_OK;
}
//-----------------------------------------------------------------------------
// Name: DirectPlayMessageHandler
// Desc: Handler for DirectPlay messages. This function is called by
// the DirectPlay message handler pool of threads, so be careful of thread
// synchronization problems with shared memory
//-----------------------------------------------------------------------------
HRESULT WINAPI DirectPlayMessageHandler( PVOID pvUserContext,
DWORD dwMessageId,
PVOID pMsgBuffer )
{
// Try not to stay in this message handler for too long, otherwise
// there will be a backlog of data. The best solution is to
// queue data as it comes in, and then handle it on other threads.
// This function is called by the DirectPlay message handler pool of
// threads, so be careful of thread synchronization problems with shared memory
switch( dwMessageId )
{
case DPN_MSGID_CREATE_PLAYER:
{
HRESULT hr;
PDPNMSG_CREATE_PLAYER pCreatePlayerMsg;
pCreatePlayerMsg = (PDPNMSG_CREATE_PLAYER)pMsgBuffer;
// Get the peer info and extract its name
DWORD dwSize = 0;
DPN_PLAYER_INFO* pdpPlayerInfo = NULL;
hr = g_pDPServer->GetClientInfo( pCreatePlayerMsg->dpnidPlayer,
pdpPlayerInfo, &dwSize, 0 );
if( FAILED(hr) && hr != DPNERR_BUFFERTOOSMALL )
{
if( hr == DPNERR_INVALIDPLAYER )
{
// Ignore this message if this is for the host
break;
}
return DXTRACE_ERR( TEXT("GetClientInfo"), hr );
}
pdpPlayerInfo = (DPN_PLAYER_INFO*) new BYTE[ dwSize ];
ZeroMemory( pdpPlayerInfo, dwSize );
pdpPlayerInfo->dwSize = sizeof(DPN_PLAYER_INFO);
hr = g_pDPServer->GetClientInfo( pCreatePlayerMsg->dpnidPlayer,
pdpPlayerInfo, &dwSize, 0 );
if( FAILED(hr) )
return DXTRACE_ERR( TEXT("GetClientInfo"), hr );
// Create a new and fill in a APP_PLAYER_INFO
APP_PLAYER_INFO* pPlayerInfo = new APP_PLAYER_INFO;
ZeroMemory( pPlayerInfo, sizeof(APP_PLAYER_INFO) );
pPlayerInfo->lRefCount = 1;
pPlayerInfo->dpnidPlayer = pCreatePlayerMsg->dpnidPlayer;
// This stores a extra TCHAR copy of the player name for
// easier access. This will be redundent copy since DPlay
// also keeps a copy of the player name in GetClientInfo()
DXUtil_ConvertWideStringToGeneric( pPlayerInfo->strPlayerName,
pdpPlayerInfo->pwszName, MAX_PLAYER_NAME );
SAFE_DELETE_ARRAY( pdpPlayerInfo );
// Tell DirectPlay to store this pPlayerInfo
// pointer in the pvPlayerContext.
pCreatePlayerMsg->pvPlayerContext = pPlayerInfo;
// Send all connected players a message telling about this new player
SendCreatePlayerMsg( pPlayerInfo, DPNID_ALL_PLAYERS_GROUP );
// Tell this new player about the world state
SendWorldStateToNewPlayer( pCreatePlayerMsg->dpnidPlayer );
// Update the number of active players, and
// post a message to the dialog thread to update the
// UI. This keeps the DirectPlay message handler
// from blocking
InterlockedIncrement( &g_lNumberOfActivePlayers );
if( g_hDlg != NULL )
PostMessage( g_hDlg, WM_APP_UPDATE_STATS, 0, 0 );
break;
}
case DPN_MSGID_DESTROY_PLAYER:
{
PDPNMSG_DESTROY_PLAYER pDestroyPlayerMsg;
pDestroyPlayerMsg = (PDPNMSG_DESTROY_PLAYER)pMsgBuffer;
APP_PLAYER_INFO* pPlayerInfo = (APP_PLAYER_INFO*) pDestroyPlayerMsg->pvPlayerContext;
// Ignore this message if this is the host player
if( pPlayerInfo == NULL )
break;
// Send all connected players a message telling about this destroyed player
SendDestroyPlayerMsgToAll( pPlayerInfo );
PLAYER_LOCK(); // enter player context CS
PLAYER_RELEASE( pPlayerInfo ); // Release player and cleanup if needed
PLAYER_UNLOCK(); // leave player context CS
// Update the number of active players, and
// post a message to the dialog thread to update the
// UI. This keeps the DirectPlay message handler
// from blocking
InterlockedDecrement( &g_lNumberOfActivePlayers );
if( g_hDlg != NULL )
PostMessage( g_hDlg, WM_APP_UPDATE_STATS, 0, 0 );
break;
}
case DPN_MSGID_TERMINATE_SESSION:
{
PDPNMSG_TERMINATE_SESSION pTerminateSessionMsg;
pTerminateSessionMsg = (PDPNMSG_TERMINATE_SESSION)pMsgBuffer;
g_hrDialog = DPNERR_CONNECTIONLOST;
EndDialog( g_hDlg, 0 );
break;
}
case DPN_MSGID_RECEIVE:
{
PDPNMSG_RECEIVE pReceiveMsg;
pReceiveMsg = (PDPNMSG_RECEIVE)pMsgBuffer;
APP_PLAYER_INFO* pPlayerInfo = (APP_PLAYER_INFO*) pReceiveMsg->pvPlayerContext;
GAMEMSG_GENERIC* pMsg = (GAMEMSG_GENERIC*) pReceiveMsg->pReceiveData;
// This simple voice server doesn't expect any msgs from the clients
break;
}
}
return S_OK;
}
//-----------------------------------------------------------------------------
// Name: DirectPlayVoiceServerMessageHandler()
// Desc: The callback for DirectPlayVoice server messages.
//-----------------------------------------------------------------------------
HRESULT CALLBACK DirectPlayVoiceServerMessageHandler( LPVOID lpvUserContext, DWORD dwMessageType,
LPVOID lpMessage )
{
// This simple sample doesn't respond to any server messages
return S_OK;
}
//-----------------------------------------------------------------------------
// Name: StartServer
// Desc:
//-----------------------------------------------------------------------------
HRESULT StartServer( HWND hDlg )
{
DWORD dwSessionType;
int lCurSelection;
HRESULT hr;
PDIRECTPLAY8ADDRESS pDP8AddrLocal = NULL;
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Starting server...") );
SetCursor( LoadCursor(NULL, IDC_WAIT) );
WCHAR wstrSessionName[MAX_PATH];
GetDlgItemText( hDlg, IDC_SESSION_NAME, g_strSessionName, MAX_PATH );
DXUtil_ConvertGenericStringToWide( wstrSessionName, g_strSessionName );
BOOL bPortTranslated;
g_dwPort = GetDlgItemInt( hDlg, IDC_PORT, &bPortTranslated, FALSE );
if( !bPortTranslated )
g_dwPort = 0;
// Create IDirectPlay8Server
if( FAILED( hr = CoCreateInstance( CLSID_DirectPlay8Server, NULL,
CLSCTX_INPROC_SERVER,
IID_IDirectPlay8Server,
(LPVOID*) &g_pDPServer ) ) )
return DXTRACE_ERR( TEXT("CoCreateInstance"), hr );
// Init IDirectPlay8Server
if( FAILED( hr = g_pDPServer->Initialize( NULL, DirectPlayMessageHandler, 0 ) ) )
return DXTRACE_ERR( TEXT("Initialize"), hr );
hr = CoCreateInstance( CLSID_DirectPlay8Address, NULL,
CLSCTX_ALL, IID_IDirectPlay8Address,
(LPVOID*) &pDP8AddrLocal );
if( FAILED(hr) )
{
DXTRACE_ERR( TEXT("CoCreateInstance"), hr );
goto LCleanup;
}
hr = pDP8AddrLocal->SetSP( &CLSID_DP8SP_TCPIP );
if( FAILED(hr) )
{
DXTRACE_ERR( TEXT("SetSP"), hr );
goto LCleanup;
}
// Add the port to pDP8AddrLocal, if the port is non-zero.
// If the port is 0, then DirectPlay will pick a port,
// Games will typically hard code the port so the
// user need not know it
if( g_dwPort != 0 )
{
if( FAILED( hr = pDP8AddrLocal->AddComponent( DPNA_KEY_PORT,
&g_dwPort, sizeof(g_dwPort),
DPNA_DATATYPE_DWORD ) ) )
return DXTRACE_ERR( TEXT("AddComponent"), hr );
}
DPN_APPLICATION_DESC dpnAppDesc;
ZeroMemory( &dpnAppDesc, sizeof(DPN_APPLICATION_DESC) );
dpnAppDesc.dwSize = sizeof( DPN_APPLICATION_DESC );
dpnAppDesc.dwFlags = DPNSESSION_CLIENT_SERVER;
dpnAppDesc.guidApplication = g_guidApp;
dpnAppDesc.pwszSessionName = wstrSessionName;
hr = g_pDPServer->Host( &dpnAppDesc, &pDP8AddrLocal, 1, NULL, NULL, NULL, 0 );
if( FAILED(hr) )
{
DXTRACE_ERR( TEXT("Host"), hr );
goto LCleanup;
}
// Get the selected compression codec
g_guidDVSessionCT = DPVCTGUID_DEFAULT;
lCurSelection = (LONG)SendDlgItemMessage( hDlg, IDC_COMPRESSION_COMBO, CB_GETCURSEL, 0, 0 );
if( lCurSelection != CB_ERR )
{
GUID* pGuidCT = (LPGUID) SendDlgItemMessage( hDlg, IDC_COMPRESSION_COMBO,
CB_GETITEMDATA, lCurSelection, 0 );
if( pGuidCT != NULL )
g_guidDVSessionCT = (*pGuidCT);
}
// Create a DirectPlay Voice session
g_pNetVoice = new CNetVoice( NULL, DirectPlayVoiceServerMessageHandler );
if( IsDlgButtonChecked( hDlg, IDC_MIXING ) == BST_CHECKED )
dwSessionType = DVSESSIONTYPE_MIXING;
else
dwSessionType = DVSESSIONTYPE_FORWARDING;
if( FAILED( g_hrDialog = g_pNetVoice->Init( hDlg, TRUE, FALSE,
g_pDPServer, dwSessionType,
&g_guidDVSessionCT, NULL ) ) )
{
if( FAILED(g_hrDialog) )
DXTRACE_ERR( TEXT("Init"), g_hrDialog );
EndDialog( hDlg, 0 );
return g_hrDialog;
}
SetCursor( LoadCursor(NULL, IDC_ARROW) );
g_bServerStarted = TRUE;
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Server started.") );
LCleanup:
SAFE_RELEASE( pDP8AddrLocal );
SAFE_RELEASE( pDP8AddrLocal );
return hr;
}
//-----------------------------------------------------------------------------
// Name: StopServer
// Desc:
//-----------------------------------------------------------------------------
VOID StopServer( HWND hDlg )
{
if( hDlg )
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Stopping server...") );
SetCursor( LoadCursor(NULL, IDC_WAIT) );
// Disconnect from the DirectPlayVoice session,
// and destory it if we are the host player.
SAFE_DELETE( g_pNetVoice );
if( g_pDPServer )
{
g_pDPServer->Close(0);
SAFE_RELEASE( g_pDPServer );
}
g_bServerStarted = FALSE;
SetCursor( LoadCursor(NULL, IDC_ARROW) );
if( hDlg )
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Server stoped.") );
}
//-----------------------------------------------------------------------------
// Name: DisplayPlayers
// Desc:
//-----------------------------------------------------------------------------
VOID DisplayPlayers( HWND hDlg )
{
HRESULT hr;
DWORD dwNumPlayers = 0;
DPNID* aPlayers = NULL;
SendMessage( GetDlgItem(hDlg, IDC_PLAYER_LIST), LB_RESETCONTENT, 0, 0 );
if( NULL == g_pDPServer )
return;
// Enumerate all the connected players
while( TRUE )
{
hr = g_pDPServer->EnumPlayersAndGroups( aPlayers, &dwNumPlayers, DPNENUM_PLAYERS );
if( SUCCEEDED(hr) )
break;
if( FAILED(hr) && hr != DPNERR_BUFFERTOOSMALL )
return;
SAFE_DELETE_ARRAY( aPlayers );
aPlayers = new DPNID[ dwNumPlayers ];
}
// For each player, send a "create player" message to the new player
for( DWORD i = 0; i<dwNumPlayers; i++ )
{
APP_PLAYER_INFO* pPlayerInfo = NULL;
do
{
// Get the player context accosicated with this DPNID
// Call GetPlayerContext() until it returns something other than DPNERR_NOTREADY
// DPNERR_NOTREADY will be returned if the callback thread has not
// yet returned from DPN_MSGID_CREATE_PLAYER, which sets the player's context
hr = g_pDPServer->GetPlayerContext( aPlayers[i], (LPVOID*) &pPlayerInfo, 0 );
}
while( hr == DPNERR_NOTREADY );
// Ignore this player if we can't get the context
if( pPlayerInfo == NULL || FAILED(hr) )
continue;
TCHAR strTemp[MAX_PATH];
wsprintf( strTemp, TEXT("DPNID: 0x%0.8x (%s)"), pPlayerInfo->dpnidPlayer, pPlayerInfo->strPlayerName );
int nIndex = (int)SendMessage( GetDlgItem(hDlg, IDC_PLAYER_LIST), LB_ADDSTRING,
0, (LPARAM)strTemp );
}
SAFE_DELETE_ARRAY( aPlayers );
}
//-----------------------------------------------------------------------------
// Name: SendCreatePlayerMsg
// Desc: Send the target player a creation message about the player identified
// in the APP_PLAYER_INFO struct.
//-----------------------------------------------------------------------------
HRESULT SendCreatePlayerMsg( APP_PLAYER_INFO* pPlayerAbout, DPNID dpnidTarget )
{
GAMEMSG_CREATE_PLAYER msgCreatePlayer;
msgCreatePlayer.dwType = GAME_MSGID_CREATE_PLAYER;
msgCreatePlayer.dpnidPlayer = pPlayerAbout->dpnidPlayer;
_tcscpy( msgCreatePlayer.strPlayerName, pPlayerAbout->strPlayerName );
DPN_BUFFER_DESC bufferDesc;
bufferDesc.dwBufferSize = sizeof(GAMEMSG_CREATE_PLAYER);
bufferDesc.pBufferData = (BYTE*) &msgCreatePlayer;
// DirectPlay will tell via the message handler
// if there are any severe errors, so ignore any errors
DPNHANDLE hAsync;
g_pDPServer->SendTo( dpnidTarget, &bufferDesc, 1,
0, NULL, &hAsync, DPNSEND_NOLOOPBACK | DPNSEND_GUARANTEED );
return S_OK;
}
//-----------------------------------------------------------------------------
// Name: SendWorldStateToNewPlayer
// Desc: Send the world state to the new player. For this sample, it is just
// "create player" message for every connected player
//-----------------------------------------------------------------------------
HRESULT SendWorldStateToNewPlayer( DPNID dpnidNewPlayer )
{
HRESULT hr;
DWORD dwNumPlayers = 0;
DPNID* aPlayers = NULL;
// Tell this player the dpnid of itself
GAMEMSG_SET_ID msgSetID;
msgSetID.dwType = GAME_MSGID_SET_ID;
msgSetID.dpnidPlayer = dpnidNewPlayer;
DPN_BUFFER_DESC bufferDesc;
bufferDesc.dwBufferSize = sizeof(GAMEMSG_SET_ID);
bufferDesc.pBufferData = (BYTE*) &msgSetID;
// DirectPlay will tell via the message handler
// if there are any severe errors, so ignore any errors
DPNHANDLE hAsync;
g_pDPServer->SendTo( dpnidNewPlayer, &bufferDesc, 1,
0, NULL, &hAsync, DPNSEND_NOLOOPBACK | DPNSEND_GUARANTEED );
// Enumerate all the connected players
while( TRUE )
{
hr = g_pDPServer->EnumPlayersAndGroups( aPlayers, &dwNumPlayers, DPNENUM_PLAYERS );
if( SUCCEEDED(hr) )
break;
if( FAILED(hr) && hr != DPNERR_BUFFERTOOSMALL )
return DXTRACE_ERR( TEXT("EnumPlayersAndGroups"), hr );
SAFE_DELETE_ARRAY( aPlayers );
aPlayers = new DPNID[ dwNumPlayers ];
}
// For each player, send a "create player" message to the new player
for( DWORD i = 0; i<dwNumPlayers; i++ )
{
APP_PLAYER_INFO* pPlayerInfo = NULL;
// Don't send a create msg to the new player about itself. This will
// be already done when we sent one to DPNID_ALL_PLAYERS_GROUP
if( aPlayers[i] == dpnidNewPlayer )
continue;
// Get the player context accosicated with this DPNID
hr = g_pDPServer->GetPlayerContext( aPlayers[i], (LPVOID*) &pPlayerInfo, 0 );
// Ignore this player if we can't get the context
if( pPlayerInfo == NULL || FAILED(hr) )
continue;
SendCreatePlayerMsg( pPlayerInfo, dpnidNewPlayer );
}
SAFE_DELETE_ARRAY( aPlayers );
return S_OK;
}
//-----------------------------------------------------------------------------
// Name: SendDestroyPlayerMsgToAll
// Desc:
//-----------------------------------------------------------------------------
HRESULT SendDestroyPlayerMsgToAll( APP_PLAYER_INFO* pPlayerInfo )
{
GAMEMSG_DESTROY_PLAYER msgDestroyPlayer;
msgDestroyPlayer.dwType = GAME_MSGID_DESTROY_PLAYER;
msgDestroyPlayer.dpnidPlayer = pPlayerInfo->dpnidPlayer;
DPN_BUFFER_DESC bufferDesc;
bufferDesc.dwBufferSize = sizeof(GAMEMSG_CREATE_PLAYER);
bufferDesc.pBufferData = (BYTE*) &msgDestroyPlayer;
// DirectPlay will tell via the message handler
// if there are any severe errors, so ignore any errors
DPNHANDLE hAsync;
g_pDPServer->SendTo( DPNID_ALL_PLAYERS_GROUP, &bufferDesc, 1,
0, NULL, &hAsync, DPNSEND_NOLOOPBACK | DPNSEND_GUARANTEED );
return S_OK;
}

View File

@@ -0,0 +1,204 @@
# Microsoft Developer Studio Project File - Name="VoiceServer" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=VoiceServer - 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 "voiceserver.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 "voiceserver.mak" CFG="VoiceServer - Win32 Debug Unicode"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "VoiceServer - Win32 Debug Unicode" (based on "Win32 (x86) Application")
!MESSAGE "VoiceServer - Win32 Release Unicode" (based on "Win32 (x86) Application")
!MESSAGE "VoiceServer - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "VoiceServer - 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)" == "VoiceServer - 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 "..\..\..\common\include" /I "..\common" /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)" == "VoiceServer - 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" /I "..\common" /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)" == "VoiceServer - 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" /I "..\common" /D "_WINDOWS" /D "_DEBUG" /D "WIN32" /D "_WIN32_DCOM" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\common\include" /I "..\common" /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)" == "VoiceServer - 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 "..\..\..\common\include" /I "..\common" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "WIN32" /D "_WIN32_DCOM" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\common\include" /I "..\common" /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 "VoiceServer - Win32 Release"
# Name "VoiceServer - Win32 Debug"
# Name "VoiceServer - Win32 Debug Unicode"
# Name "VoiceServer - Win32 Release Unicode"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\common\VoiceClientserver.h
# End Source File
# Begin Source File
SOURCE=.\VoiceServer.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=.\directx.ico
# End Source File
# Begin Source File
SOURCE=.\resource.h
# End Source File
# Begin Source File
SOURCE=.\VoiceServer.rc
# 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\netvoice.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\common\include\NetVoice.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: "VoiceServer"=.\VoiceServer.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 VoiceServer.dsp
!IF "$(CFG)" == ""
CFG=VoiceServer - Win32 Debug Unicode
!MESSAGE No configuration specified. Defaulting to VoiceServer - Win32 Debug Unicode.
!ENDIF
!IF "$(CFG)" != "VoiceServer - Win32 Release" && "$(CFG)" != "VoiceServer - Win32 Debug" && "$(CFG)" != "VoiceServer - Win32 Debug Unicode" && "$(CFG)" != "VoiceServer - 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 "VoiceServer.mak" CFG="VoiceServer - Win32 Debug Unicode"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "VoiceServer - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "VoiceServer - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE "VoiceServer - Win32 Debug Unicode" (based on "Win32 (x86) Application")
!MESSAGE "VoiceServer - 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)" == "VoiceServer - Win32 Release"
OUTDIR=.\Release
INTDIR=.\Release
# Begin Custom Macros
OutDir=.\Release
# End Custom Macros
ALL : "$(OUTDIR)\VoiceServer.exe"
CLEAN :
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\netvoice.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\VoiceServer.obj"
-@erase "$(INTDIR)\VoiceServer.res"
-@erase "$(OUTDIR)\VoiceServer.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "..\..\..\common\include" /I "..\common" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "WIN32" /D "_WIN32_DCOM" /Fp"$(INTDIR)\VoiceServer.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)\VoiceServer.res" /d "NDEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\VoiceServer.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)\VoiceServer.pdb" /machine:I386 /out:"$(OUTDIR)\VoiceServer.exe" /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\VoiceServer.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\netvoice.obj" \
"$(INTDIR)\VoiceServer.res"
"$(OUTDIR)\VoiceServer.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "VoiceServer - Win32 Debug"
OUTDIR=.\Debug
INTDIR=.\Debug
# Begin Custom Macros
OutDir=.\Debug
# End Custom Macros
ALL : "$(OUTDIR)\VoiceServer.exe"
CLEAN :
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\netvoice.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(INTDIR)\VoiceServer.obj"
-@erase "$(INTDIR)\VoiceServer.res"
-@erase "$(OUTDIR)\VoiceServer.exe"
-@erase "$(OUTDIR)\VoiceServer.ilk"
-@erase "$(OUTDIR)\VoiceServer.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\common\include" /I "..\common" /D "_WINDOWS" /D "_DEBUG" /D "WIN32" /D "_WIN32_DCOM" /Fp"$(INTDIR)\VoiceServer.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)\VoiceServer.res" /d "_DEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\VoiceServer.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)\VoiceServer.pdb" /debug /machine:I386 /nodefaultlib:"LIBC" /out:"$(OUTDIR)\VoiceServer.exe" /pdbtype:sept /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\VoiceServer.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\netvoice.obj" \
"$(INTDIR)\VoiceServer.res"
"$(OUTDIR)\VoiceServer.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "VoiceServer - Win32 Debug Unicode"
OUTDIR=.\Win32_Debug_Unicode
INTDIR=.\Win32_Debug_Unicode
# Begin Custom Macros
OutDir=.\Win32_Debug_Unicode
# End Custom Macros
ALL : "$(OUTDIR)\VoiceServer.exe"
CLEAN :
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\netvoice.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(INTDIR)\VoiceServer.obj"
-@erase "$(INTDIR)\VoiceServer.res"
-@erase "$(OUTDIR)\VoiceServer.exe"
-@erase "$(OUTDIR)\VoiceServer.ilk"
-@erase "$(OUTDIR)\VoiceServer.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\common\include" /I "..\common" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D "_WIN32_DCOM" /D "UNICODE" /D "_UNICODE" /Fp"$(INTDIR)\VoiceServer.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)\VoiceServer.res" /d "_DEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\VoiceServer.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)\VoiceServer.pdb" /debug /machine:I386 /nodefaultlib:"LIBC" /out:"$(OUTDIR)\VoiceServer.exe" /pdbtype:sept /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\VoiceServer.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\netvoice.obj" \
"$(INTDIR)\VoiceServer.res"
"$(OUTDIR)\VoiceServer.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "VoiceServer - Win32 Release Unicode"
OUTDIR=.\Win32_Release_Unicode
INTDIR=.\Win32_Release_Unicode
# Begin Custom Macros
OutDir=.\Win32_Release_Unicode
# End Custom Macros
ALL : "$(OUTDIR)\VoiceServer.exe"
CLEAN :
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\netvoice.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\VoiceServer.obj"
-@erase "$(INTDIR)\VoiceServer.res"
-@erase "$(OUTDIR)\VoiceServer.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "..\..\..\common\include" /I "..\common" /D "NDEBUG" /D "_MBCS" /D "_WINDOWS" /D "WIN32" /D "_WIN32_DCOM" /D "UNICODE" /D "_UNICODE" /Fp"$(INTDIR)\VoiceServer.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)\VoiceServer.res" /d "NDEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\VoiceServer.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)\VoiceServer.pdb" /machine:I386 /out:"$(OUTDIR)\VoiceServer.exe" /stack:0x10000,0x10000
LINK32_OBJS= \
"$(INTDIR)\VoiceServer.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\netvoice.obj" \
"$(INTDIR)\VoiceServer.res"
"$(OUTDIR)\VoiceServer.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ENDIF
!IF "$(NO_EXTERNAL_DEPS)" != "1"
!IF EXISTS("VoiceServer.dep")
!INCLUDE "VoiceServer.dep"
!ELSE
!MESSAGE Warning: cannot find "VoiceServer.dep"
!ENDIF
!ENDIF
!IF "$(CFG)" == "VoiceServer - Win32 Release" || "$(CFG)" == "VoiceServer - Win32 Debug" || "$(CFG)" == "VoiceServer - Win32 Debug Unicode" || "$(CFG)" == "VoiceServer - Win32 Release Unicode"
SOURCE=.\VoiceServer.cpp
"$(INTDIR)\VoiceServer.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\VoiceServer.rc
"$(INTDIR)\VoiceServer.res" : $(SOURCE) "$(INTDIR)"
$(RSC) $(RSC_PROJ) $(SOURCE)
SOURCE=..\..\..\common\src\dxutil.cpp
"$(INTDIR)\dxutil.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\..\common\src\netvoice.cpp
"$(INTDIR)\netvoice.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF

View File

@@ -0,0 +1,32 @@
//-----------------------------------------------------------------------------
//
// Sample Name: VoiceClientServer Sample
//
// Copyright (c) 1999-2001 Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
Description
===========
VoiceClientServer is similar in form to SimpleClientServer, but
shows how to add DirectPlay Voice support.
Path
====
Source: DXSDK\Samples\Multimedia\DirectPlay\VoiceClientServer
Executable: DXSDK\Samples\Multimedia\DirectPlay\Bin
User's Guide
============
Refer to User's Guide section of the SimpleClientServer sample
for the basics.
In addition to what SimpleClientServer does, on the server
you can set codec to use, and set the server to be either a
Forwarding server or Mixing server. See the DirectX docs
for more information about these server types.
On the client side, once the chat session has begin any client
may alter the playback or capture settings by clicking on "Setup".