From e21e3d0a80a64a879c431c0ee4d8791a9eb96e3c Mon Sep 17 00:00:00 2001 From: "Dimitrie O. Paun" Date: Sat, 27 Sep 2003 02:23:44 +0000 Subject: [PATCH] Merge documentation/status/directplay into the code. --- dlls/dplayx/dpclassfactory.c | 3 +- dlls/dplayx/dplay.c | 2 - dlls/dplayx/dplayx_global.c | 15 ++- dlls/dplayx/dplayx_main.c | 38 +++++++ dlls/dplayx/dplayx_messages.c | 6 +- dlls/dplayx/dplayx_queue.h | 6 ++ documentation/status/directplay | 172 -------------------------------- 7 files changed, 60 insertions(+), 182 deletions(-) delete mode 100644 documentation/status/directplay diff --git a/dlls/dplayx/dpclassfactory.c b/dlls/dplayx/dpclassfactory.c index 7eb68cd77f3..e9523a796a2 100644 --- a/dlls/dplayx/dpclassfactory.c +++ b/dlls/dplayx/dpclassfactory.c @@ -1,4 +1,5 @@ -/* +/* COM class factory for direct play lobby interfaces. + * * Copyright 1999, 2000 Peter Hunnisett * * This library is free software; you can redistribute it and/or diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c index a67616e3b5d..9533af23a2e 100644 --- a/dlls/dplayx/dplay.c +++ b/dlls/dplayx/dplay.c @@ -2,8 +2,6 @@ * * Copyright 1998,1999,2000,2001 - Peter Hunnisett * - * - * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either diff --git a/dlls/dplayx/dplayx_global.c b/dlls/dplayx/dplayx_global.c index d344285593c..909253ef7b9 100644 --- a/dlls/dplayx/dplayx_global.c +++ b/dlls/dplayx/dplayx_global.c @@ -17,10 +17,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* NOTE: Methods that begin with DPLAYX_ are used for dealing with - * dplayx.dll data which is accessible from all processes. + * + * + * NOTES: + * o 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 + * excepting base windows services and an interface to start the + * messaging thread. + * o Methods that begin with DPLAYX_ are used for dealing with + * dplayx.dll data which is accessible from all processes. + * */ #include diff --git a/dlls/dplayx/dplayx_main.c b/dlls/dplayx/dplayx_main.c index 84d5903ddc7..d79e5351656 100644 --- a/dlls/dplayx/dplayx_main.c +++ b/dlls/dplayx/dplayx_main.c @@ -18,6 +18,44 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * NOTES + * o DPMSGCMD_ENUMSESSIONSREPLY & DPMSGCMD_ENUMSESSIONSREQUEST + * Have most fields understood, but not all. Everything seems to work. + * o DPMSGCMD_REQUESTNEWPLAYERID & DPMSGCMD_NEWPLAYERIDREPLY + * Barely work. This needs to be completed for sessions to start. + * o 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: + * - Implement mutual exclusion on object data for existing functions + * - Ensure that all dll stubs are present and the ordinals are correct + * - Addition of DirectX 7.0 functionality for direct play + * - Implement some WineLib test programs using sdk programs as a skeleton + * - Change RegEnumKeyEx enumeration pattern to allow error handling and to + * share registry implementation (or at least simplify). + * - 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. + * - Fix race condition on interface destruction + * - Handles need to be correctly reference counted + * - Check if we need to deallocate any list objects when destroying + * a dplay interface + * - RunApplication process spawning needs to have correct syncronization. + * - Need to get inter lobby messages working. + * - Decypher dplay messages between applications and implement... + * - Need to implement lobby session spawning. + * - Improve footprint and realtime blocking by setting up a separate data share + * between lobby application and client since there can be multiple apps per + * client. Also get rid of offset dependency by making data offset independent + * somehow. */ #include diff --git a/dlls/dplayx/dplayx_messages.c b/dlls/dplayx/dplayx_messages.c index 6d5d4423bab..8be8ea9d02a 100644 --- a/dlls/dplayx/dplayx_messages.c +++ b/dlls/dplayx/dplayx_messages.c @@ -2,8 +2,6 @@ * * Copyright 2000,2001 - Peter Hunnisett * - * - * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either @@ -17,6 +15,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * NOTES + * o Messaging interface required for both DirectPlay and DirectPlayLobby. */ #include @@ -509,4 +510,3 @@ void DP_MSG_ErrorReceived( IDirectPlay2AImpl* This, WORD wCommandId, wCommandId, DPLAYX_HresultToString( lpcErrorMsg->errorCode) ); DebugBreak(); } - diff --git a/dlls/dplayx/dplayx_queue.h b/dlls/dplayx/dplayx_queue.h index 9ca3abd2c1d..814f684e6fa 100644 --- a/dlls/dplayx/dplayx_queue.h +++ b/dlls/dplayx/dplayx_queue.h @@ -15,6 +15,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * NOTES + * o Linked list implementation for dplay/dplobby. Based off of the BSD + * version found in + * o Port it to ? + * */ #ifndef __WINE_DPLAYX_QUEUE_H diff --git a/documentation/status/directplay b/documentation/status/directplay deleted file mode 100644 index 1933a80ab89..00000000000 --- a/documentation/status/directplay +++ /dev/null @@ -1,172 +0,0 @@ -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 DirectX user header files are include/dplay.h, include/dplobby.h. - -Implementation of the DPLAY and DPLAYX dlls are both in the dlls/dplayx -directory. Here's a brief description of the function of each of the files in that -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. - -dpinit.h: Header file so that dpclassfactory.c can access dplay and dplobby query - functions. Shouldn't be included by anything else. - -dplayx_global.h, -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 - excepting base windows services and an interface to start the - messaging thread. - -name_server.h, -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. - -dplayx_queue.h: Linked list implementation for dplay/dplobby. Based off of the BSD - version found in - -dplayx_messages.h, -dplayx_messages.c: Messaging interface required for both DirectPlay and - DirectPlayLobby. - -dplaysp.c, -dplaysp.h: COM interface between DPLAYX and the service provider dlls. dplaysp.h is - something that should be included into any service provider. Basically - the COM interface is partially documented but is generally lacking in the - finer points. - -Presently the architectural relationship between this files is a little shakey, but -isn't so sufficiently bad that it needs fixing yet. - -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. - -However, now that address separation is a reality, all binary samples provided -in the sdk can be used. I have had success spawning processes and one -directx7 example will allow creation of an app and allow another to join it. -Unfortunately, there isn't much for it to be able to do give the state of -inter directlobby or directplay messaging. - -Messages which work: - -For session enumeration: DPMSGCMD_ENUMSESSIONSREPLY & DPMSGCMD_ENUMSESSIONSREQUEST - have most fields understood, but not all. Everything _seems_ - to work. - -For playerid requesting: DPMSGCMD_REQUESTNEWPLAYERID & DPMSGCMD_NEWPLAYERIDREPLY - barely work. This needs to be completed for sessions to be - able to actually start. - -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) Separate 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.) - - (done)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 and to - share registry implementation (or at least simplify). - - 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. - - (done) Find out how to call the service provider dlls - they don't have a published interface! - - Fix race condition on interface destruction - - Handles need to be correctly reference counted - - Need to check if we need to deallocate any list objects when destroying - dplay interface - - RunApplication process spawning needs to have correct syncronization. - - Need to get inter lobby messages working. - - Decypher dplay messages between applications and implement... - - Need to implement lobby session spawning. - -ENHANCEMENTS: - - Improve footprint and realtime blocking by setting up a separate data share - between lobby application and client since there can be multiple apps per - client. Also get rid of offset dependency by making data offset independent - somehow. - - Handle everything in UNICODE (as server does) and do conversions for ANSI - interfaces. Should cut down on dplayx code base and maintanability (marginally) - and could be used to improve efficiency of dialog with the server (it wouldn't - have to do ANSI<->UNICODE transformations). - - - -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 SDK program basis: - override.exe - - (calls dpserial so basic problems with that remain) - - after that ? - - dplaunch.exe - - I think that everything is basically working. The launched app may not - work on the other hand. - - lserver.exe - - Missing messaging portion. Everything else works. - - bellhop.exe - - Need to implement lobby server support. - - ? - - dpslots.exe - - Works as host except for message stuff - - Missing correct handling of receipt of playerid - -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