This file contains information on the implementation of the direct play
and direct play lobby features. There's lots to do and I'm not exactly
implementing it overnight! Please lend a hand.

Most methods and APIs are but stubs at this point. Examine the code
to see what has been implemented. Use -debugmsg +dplay to get a 
reasonably thourough description of what's going on.

Associated header files are include/dplay.h, include/dplobby.h.

Implementation of the DPLAY and DPLAYX dlls are both in the dlls/dplayx
directory.

dplay.c: Implementation of all the direct play object interfaces.
dplobby.c: Implementation of all the direct play lobby interfaces.
dpclassfactory.c: Implementation of the COM class factory which can create either
                  direct play lobby or direct play lobby interfaces.
dplayx_global.c: Implementation of all things which are associated with dplay on
                 the computer - ie shared resources and such. Methods in this
                 compilation unit should not call anything out side this unit.
name_server.c: Implementation of all things which are associated with the name
               server functionality
dplayx_main.c: LibMain executed for loading and unloading the dll. This will make
               the call to dplayx_global.c to request initialization and destruction
               of any global data.

Presently the architectural relationship between this files is a little shakey, but
isn't so sufficiently bad that it needs fixing yet.

Everything right now will run in the context of the calling thread, but at some
point in the future the code will actually be far enough along to create a thread
for session management.

I think I can safely say that any application which requires direct play
or direct play lobby will not work at this point. Priority will be to get
examples from the sdk running. Once they're at least partially working, I can
get down to trying to get some of the games working.

A small issue will be the fact that DirectX 6.1(ie. DirectPlay4) introduces a layer of functionality
inside the DP objects which provide guaranteed protocol delivery. This is
even if the native protocol, IPX or modem for instance, doesn't guarantee it. I'm going to leave
this kind of implementation to as close to the end as possible. However, I
will implement an abstraction layer, where possible, for this functionality. 
It will do nothing to start, but will require only the implementation of the 
guaranteness to give final implementation.


TODO:
  - (done) Header files for DP4 and DPL3 
  - (done) Add stub functions for all DP4 and DPL3 interfaces
  - (done) Correct naming of the parameters for DP3 and DPL2
  - (done) Seperate out DP and DPL into multiple .c files
  - (done) Allow CoCreateInstance to create the new interfaces
  - (started)Implement mutual exclusion on object data for existing functions
  - (done) Create and move to correct dll directories (dplay and dplayx)
  - (done) Implement dplay in terms of dplayx
  - (done) Need a better internal implementation for the objects which scales and 
    preferably doesn't involve casting structures. Solution is a crude ctor/dtor
    which can actually trap some runtime errors.
  - (done) More generic initialization and destruction helper methods based off
    the chosen internal implementation. Solution is a crude ctor/dtor.
  - Use only windows routines where an equivalent is available
  - (done) Fix wine dplay.h and dplobby.h header files to allow apps to create the ansi versions
  - (started) Port some WineLib test programs using sdk programs (both C and C++ progs)  
  - (done) Implement a lib main for the dplayx dll (required for RunApplication, etc.)
  - Figure out how to share the global memory correctly
  - Ensure that all dll stubs are present and the ordinals are correct
  - (started) Implementation of functionality
  - Addition of DirectX 7.0 functionality for direct play (try to catch that moving train)
  - bug fixes ;)
  - Implement some WineLib test programs using sdk programs as a skeleton
  - (done) Change all RegEnumKey calls to RegEnumKeyEx.
  - Change RegEnumKeyEx enumeration pattern to allow error handling.
  - Add in appropriate RegCloseKey calls for all the opening we're doing...
  - Fix all the buffer sizes for registry calls. They're off by one - but in a safe direction.
  - Find out how to call the service provider dlls - they don't have a published interface!
  - Fix race condition on interface destruction

Programs to make work:
  - lserver.exe (from sdk)
  - override.exe (from sdk)
  - dpchat.exe (from sdk)
  - duel.exe (from sdk)
  - dplaunch.exe (from sdk)

Next API to implement on a per program basis:
  override.exe
  - fixme:dplay:DirectPlayCreate Modem binding not supported yet
  - DirectPlay3AImpl_InitializeConnection
  - DirectPlay2AImpl_Open
  - ?

  dplaunch.exe
  - IDirectPlayLobby2AImpl_CreateCompoundAddress
  - IDirectPlayLobbyAImpl_RunApplication
  - ?

  lserver.exe
  - IDirectPlayLobby2WImpl_Connect 
  - fixme:dplay:DirectPlayCreate Modem binding not supported yet
  - IDirectPlay3WImpl_CreatePlayer 
  - IDirectPlay3WImpl_CreateGroup
  - IDirectPlay3WImpl_SetGroupData
  - IDirectPlay3WImpl_Send
  - ?
 
  bellhop.exe
  - DirectPlay3AImpl_EnumConnections (lobby applications)
  - ?

  dpslots.exe
  - IDirectPlayLobby3AImpl_ConnectEx
  - ?

Other TODO:

- look at problem with parsing the resource file for dplaunch. wrc problem?
- I should be getting the dialog box to come up for dpchat when something is selected
Call OLE32.7: CoCreateInstance(010017f0,00000000,00000001,010017e0,010094b4) ret=01002f38 fs=0237
Call ADVAPI32.188: RegOpenKeyExA(80000002,5e08dd90 "Software\\Microsoft\\DirectPlay\\Compatibility",00000000,00020019,40e7f49c) ret=5e0b6e5a fs=0237

   
Peter Hunnisett  -  hunnise@nortelnetworks.com
