150 lines
5.8 KiB
Plaintext
150 lines
5.8 KiB
Plaintext
DirectPlay Notes:
|
|
|
|
1. What's New!
|
|
--------------
|
|
|
|
See the DirectPlay section in the DirectX help file for more details
|
|
on what's new.
|
|
|
|
Highlights include:
|
|
|
|
- IDirectPlayLobby - an interface that allows an external application
|
|
to launch a DirectPlay 3.0 application and provide it with all the
|
|
connection information needed to get connected to a session.
|
|
Try out the DPLAUNCH sample application for a demo of this!
|
|
|
|
- Internet TCP/IP service provider - now you can have multiplayer
|
|
applications over the Internet
|
|
|
|
- Unicode support
|
|
|
|
- Host migration
|
|
|
|
- Automatic player data propagation
|
|
|
|
- Better performance, less overhead, more stability and robustness
|
|
|
|
- Support for 3rd-party network service providers
|
|
|
|
All the new functionality of DirectPlay is in the IDirectPlay2
|
|
(Unicode) and IDirectPlay2A (ANSI) interfaces. When compiling, it is
|
|
recommended that you define the symbol IDIRECTPLAY2_OR_GREATER to make
|
|
sure that you are not using any obsolete flags or structures. The
|
|
IDirectPlay interface has not changed from previous versions of
|
|
DirectPlay.
|
|
|
|
|
|
2. Samples
|
|
----------
|
|
The following samples can be examined for examples of how to use
|
|
DirectPlay
|
|
|
|
SDK/SAMPLES/DUEL
|
|
- This simple multiplayer game uses the new IDirectPlay2 interface
|
|
- It also uses IDirectPlayLobby to make it lobby-able
|
|
|
|
SDK/SAMPLES/DPLAUNCH
|
|
- This stand-alone application demonstrates how a DirectPlay 3 app
|
|
can be launched from an external source using the IDirectPlayLobby
|
|
interface
|
|
|
|
SDK/SAMPLES/IKLOWNS
|
|
- Another multiplayer game which still uses the old IDirectPlay
|
|
interface
|
|
- It also use IDirectPlayLobby to make it lobby-able
|
|
|
|
3. General Notes
|
|
----------------
|
|
|
|
-- The names of the DirectPlay 3 DLLs have changed. The names of the
|
|
new DLLs are:
|
|
|
|
dplayx.dll - DirectPlay 3 dll
|
|
dpwsockx.dll - Winsock service provider (TCP/IP and IPX)
|
|
dpmodemx.dll - modem and serial service provider.
|
|
|
|
Make sure that any applications in development link to DPLAYX.LIB.
|
|
|
|
Applications compiled with DirectPlay 2 or earlier will not use these
|
|
new DLLs and therefore not benefit from the enhancements of DirectPlay 3.
|
|
|
|
*** If you installed Beta1 of DirectX 3, the DirectPlay 3 DLLs will
|
|
have overwritten any DirectPlay 2 DLLs you may have had installed.
|
|
Beta2 will delete these DLLs if they have the version number of
|
|
DirectX 3 (4.04.xxxx)
|
|
|
|
*** To restore them, simply reinstall DirectX 2 or any game that uses
|
|
DirectX 2. Alternatively, copy the files DPLAY.DLL, DPWSOCK.DLL and
|
|
DPSERIAL.DLL from your DirectX 2 CD to the windows SYSTEM directory.
|
|
|
|
-- The synchronization event parameter in IDirectPlay2::CreatePlayer has
|
|
been changed to a HANDLE (from an LPHANDLE). The handle must be
|
|
created by the application. Passing in an LPHANDLE will NOT generate
|
|
a compiler error but it will cause the method to return an error.
|
|
|
|
-- Make sure you read and understand the behavior of the DPSEND_GUARANTEED
|
|
flag in the Send() API. Additional text has been added to clarify the
|
|
usage of this flag.
|
|
|
|
-- The Internet TCP/IP service provider now maintains a cache of open
|
|
sockets to improve the performance of guaranteed messages i.e. sockets
|
|
will not be opened and closed for each individual message. Calling
|
|
GetCaps() and asking for the guaranteed capabilities will tell you
|
|
how many players can be supported (dwMaxPlayers).
|
|
|
|
-- If an application tries to send messages that are larger than the
|
|
maximum packet size of a protocol, DirectPlay will break it up
|
|
and send it using multiple packets and reassembling the packets on
|
|
the receiving end into a single message.
|
|
|
|
-- Added ability to host more than one game on a single machine (TCP/IP only)
|
|
|
|
-- The DirectPlay Address structure now uses GUIDs to identify chunks
|
|
in the address instead of four character codes.
|
|
|
|
-- Applications with short timeouts will not work over the Internet
|
|
due to the long latencies. Applications should specify a timeout value
|
|
of zero in EnumSessions in which case an appropriate timeout will
|
|
be calculated by the service provider.
|
|
|
|
-- DirectPlayConnect is obsolete. An application will need to create an
|
|
IDirectPlayLobby interface. It may query the connection settings that
|
|
the lobby passed in using GetConnectionSettings, and modify them using
|
|
SetConnectionSettings. It highly recommended that the application
|
|
verify that the correct session description flags are set using this
|
|
method. Finally, the application should call the Connect method and
|
|
then Release the IDirectPlayLobby interface.
|
|
|
|
-- There is now an ANSI and a UNICODE version of the DirectPlayLobbyCreate
|
|
API. The version is selected based on the UNICODE compile-time flag.
|
|
|
|
-- To use TCP/IP over the Internet, the users joining the session must
|
|
enter the IP address of the machine that hosted the game when prompted
|
|
by the service provider.
|
|
|
|
You can find out the IP address of your machine by running "winipcfg".
|
|
If you have a net card and a modem installed, you will need to make
|
|
sure you read the IP address of the modem connection to the Internet.
|
|
The IP address information for the modem will typically show up under
|
|
"PPP Adapter".
|
|
|
|
4. Known Problems
|
|
-----------------
|
|
|
|
-- Inside of any DirectPlay enumeration callback only the thread running
|
|
the callback can make calls back into the DirectPlay API. Other threads
|
|
and the service provider will be blocked from calling DirectPlay until
|
|
the enumeration has completed, so it is important to have enumeration
|
|
callbacks complete quickly.
|
|
|
|
-- IPX will not allow playing more than one game simultaneously. Use
|
|
TCP/IP to do that.
|
|
|
|
-- There is no multi-home support for IPX. Use TCP/IP if multi-homing
|
|
is needed.
|
|
|
|
-- If an application sets the player name or remote data for a non-local
|
|
player, the change will not be propagated to the remote applications.
|
|
|
|
-- DirectPlay generally will not work through proxies and firewalls.
|