Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
e21e3d0a
Commit
e21e3d0a
authored
Sep 27, 2003
by
Dimitrie O. Paun
Committed by
Alexandre Julliard
Sep 27, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merge documentation/status/directplay into the code.
parent
976483e2
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
60 additions
and
182 deletions
+60
-182
dpclassfactory.c
dlls/dplayx/dpclassfactory.c
+2
-1
dplay.c
dlls/dplayx/dplay.c
+0
-2
dplayx_global.c
dlls/dplayx/dplayx_global.c
+11
-4
dplayx_main.c
dlls/dplayx/dplayx_main.c
+38
-0
dplayx_messages.c
dlls/dplayx/dplayx_messages.c
+3
-3
dplayx_queue.h
dlls/dplayx/dplayx_queue.h
+6
-0
directplay
documentation/status/directplay
+0
-172
No files found.
dlls/dplayx/dpclassfactory.c
View file @
e21e3d0a
/*
/* COM class factory for direct play lobby interfaces.
*
* Copyright 1999, 2000 Peter Hunnisett
* Copyright 1999, 2000 Peter Hunnisett
*
*
* This library is free software; you can redistribute it and/or
* This library is free software; you can redistribute it and/or
...
...
dlls/dplayx/dplay.c
View file @
e21e3d0a
...
@@ -2,8 +2,6 @@
...
@@ -2,8 +2,6 @@
*
*
* Copyright 1998,1999,2000,2001 - Peter Hunnisett
* Copyright 1998,1999,2000,2001 - Peter Hunnisett
*
*
* <presently under construction - contact hunnise@nortelnetworks.com>
*
* This library is free software; you can redistribute it and/or
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* License as published by the Free Software Foundation; either
...
...
dlls/dplayx/dplayx_global.c
View file @
e21e3d0a
...
@@ -17,10 +17,17 @@
...
@@ -17,10 +17,17 @@
* You should have received a copy of the GNU Lesser General Public
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
*
*
/* NOTE: Methods that begin with DPLAYX_ are used for dealing with
* NOTES:
* dplayx.dll data which is accessible from all processes.
* 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 <stdarg.h>
#include <stdarg.h>
...
...
dlls/dplayx/dplayx_main.c
View file @
e21e3d0a
...
@@ -18,6 +18,44 @@
...
@@ -18,6 +18,44 @@
* You should have received a copy of the GNU Lesser General Public
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* 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 <stdarg.h>
#include <stdarg.h>
...
...
dlls/dplayx/dplayx_messages.c
View file @
e21e3d0a
...
@@ -2,8 +2,6 @@
...
@@ -2,8 +2,6 @@
*
*
* Copyright 2000,2001 - Peter Hunnisett
* Copyright 2000,2001 - Peter Hunnisett
*
*
* <presently under construction - contact hunnise@nortelnetworks.com>
*
* This library is free software; you can redistribute it and/or
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* License as published by the Free Software Foundation; either
...
@@ -17,6 +15,9 @@
...
@@ -17,6 +15,9 @@
* You should have received a copy of the GNU Lesser General Public
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* NOTES
* o Messaging interface required for both DirectPlay and DirectPlayLobby.
*/
*/
#include <stdarg.h>
#include <stdarg.h>
...
@@ -509,4 +510,3 @@ void DP_MSG_ErrorReceived( IDirectPlay2AImpl* This, WORD wCommandId,
...
@@ -509,4 +510,3 @@ void DP_MSG_ErrorReceived( IDirectPlay2AImpl* This, WORD wCommandId,
wCommandId
,
DPLAYX_HresultToString
(
lpcErrorMsg
->
errorCode
)
);
wCommandId
,
DPLAYX_HresultToString
(
lpcErrorMsg
->
errorCode
)
);
DebugBreak
();
DebugBreak
();
}
}
dlls/dplayx/dplayx_queue.h
View file @
e21e3d0a
...
@@ -15,6 +15,12 @@
...
@@ -15,6 +15,12 @@
* You should have received a copy of the GNU Lesser General Public
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* 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 <sys/queue.h>
* o Port it to <wine/list.h> ?
*
*/
*/
#ifndef __WINE_DPLAYX_QUEUE_H
#ifndef __WINE_DPLAYX_QUEUE_H
...
...
documentation/status/directplay
deleted
100644 → 0
View file @
976483e2
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 <sys/queue.h>
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment