| 1 | // $Id: dplay_global.h,v 1.3 2001-03-13 23:13:28 hugh Exp $
|
|---|
| 2 | #ifndef __WINE_DPLAY_GLOBAL_INCLUDED
|
|---|
| 3 | #define __WINE_DPLAY_GLOBAL_INCLUDED
|
|---|
| 4 |
|
|---|
| 5 | #include "dplaysp.h"
|
|---|
| 6 | #include "dplayx_queue.h"
|
|---|
| 7 |
|
|---|
| 8 | extern HRESULT DPL_EnumAddress( LPDPENUMADDRESSCALLBACK lpEnumAddressCallback,
|
|---|
| 9 | LPCVOID lpAddress, DWORD dwAddressSize,
|
|---|
| 10 | LPVOID lpContext );
|
|---|
| 11 |
|
|---|
| 12 | extern DWORD DP_CalcSessionDescSize( LPCDPSESSIONDESC2 lpSessDesc, BOOL bAnsi );
|
|---|
| 13 |
|
|---|
| 14 | /*****************************************************************************
|
|---|
| 15 | * Predeclare the interface implementation structures
|
|---|
| 16 | */
|
|---|
| 17 | typedef struct IDirectPlay2Impl IDirectPlay2AImpl;
|
|---|
| 18 | typedef struct IDirectPlay2Impl IDirectPlay2Impl;
|
|---|
| 19 | typedef struct IDirectPlay3Impl IDirectPlay3AImpl;
|
|---|
| 20 | typedef struct IDirectPlay3Impl IDirectPlay3Impl;
|
|---|
| 21 | typedef struct IDirectPlay4Impl IDirectPlay4AImpl;
|
|---|
| 22 | typedef struct IDirectPlay4Impl IDirectPlay4Impl;
|
|---|
| 23 |
|
|---|
| 24 | typedef struct tagDirectPlayIUnknownData
|
|---|
| 25 | {
|
|---|
| 26 | ULONG ulObjRef;
|
|---|
| 27 | CRITICAL_SECTION DP_lock;
|
|---|
| 28 | } DirectPlayIUnknownData;
|
|---|
| 29 |
|
|---|
| 30 | typedef struct tagEnumSessionAsyncCallbackData
|
|---|
| 31 | {
|
|---|
| 32 | LPSPINITDATA lpSpData;
|
|---|
| 33 | GUID requestGuid;
|
|---|
| 34 | DWORD dwEnumSessionFlags;
|
|---|
| 35 | DWORD dwTimeout;
|
|---|
| 36 | HANDLE hSuicideRequest;
|
|---|
| 37 | } EnumSessionAsyncCallbackData;
|
|---|
| 38 |
|
|---|
| 39 | typedef struct tagDP_MSG_REPLY_STRUCT
|
|---|
| 40 | {
|
|---|
| 41 | HANDLE hReceipt;
|
|---|
| 42 | WORD wExpectedReply;
|
|---|
| 43 | LPVOID lpReplyMsg;
|
|---|
| 44 | DWORD dwMsgBodySize;
|
|---|
| 45 | /* FIXME: Is the message header required as well? */
|
|---|
| 46 | } DP_MSG_REPLY_STRUCT, *LPDP_MSG_REPLY_STRUCT;
|
|---|
| 47 |
|
|---|
| 48 | typedef struct tagDP_MSG_REPLY_STRUCT_LIST
|
|---|
| 49 | {
|
|---|
| 50 | DPQ_ENTRY(tagDP_MSG_REPLY_STRUCT_LIST) replysExpected;
|
|---|
| 51 | DP_MSG_REPLY_STRUCT replyExpected;
|
|---|
| 52 | } DP_MSG_REPLY_STRUCT_LIST, *LPDP_MSG_REPLY_STRUCT_LIST;
|
|---|
| 53 |
|
|---|
| 54 | struct PlayerData
|
|---|
| 55 | {
|
|---|
| 56 | /* Individual player information */
|
|---|
| 57 | DPID dpid;
|
|---|
| 58 |
|
|---|
| 59 | DPNAME name;
|
|---|
| 60 | HANDLE hEvent;
|
|---|
| 61 |
|
|---|
| 62 | ULONG uRef; /* What is the reference count on this data? */
|
|---|
| 63 |
|
|---|
| 64 | /* View of local data */
|
|---|
| 65 | LPVOID lpLocalData;
|
|---|
| 66 | DWORD dwLocalDataSize;
|
|---|
| 67 |
|
|---|
| 68 | /* View of remote data */
|
|---|
| 69 | LPVOID lpRemoteData;
|
|---|
| 70 | DWORD dwRemoteDataSize;
|
|---|
| 71 |
|
|---|
| 72 | /* SP data on a per player basis */
|
|---|
| 73 | LPVOID lpSPPlayerData;
|
|---|
| 74 |
|
|---|
| 75 | DWORD dwFlags; /* Special remarks about the type of player */
|
|---|
| 76 | };
|
|---|
| 77 | typedef struct PlayerData* lpPlayerData;
|
|---|
| 78 |
|
|---|
| 79 | struct PlayerList
|
|---|
| 80 | {
|
|---|
| 81 | DPQ_ENTRY(PlayerList) players;
|
|---|
| 82 |
|
|---|
| 83 | lpPlayerData lpPData;
|
|---|
| 84 | };
|
|---|
| 85 | typedef struct PlayerList* lpPlayerList;
|
|---|
| 86 |
|
|---|
| 87 | struct GroupData
|
|---|
| 88 | {
|
|---|
| 89 | /* Internal information */
|
|---|
| 90 | DPID parent; /* If parent == 0 it's a top level group */
|
|---|
| 91 |
|
|---|
| 92 | ULONG uRef; /* Reference count */
|
|---|
| 93 |
|
|---|
| 94 | DPQ_HEAD(GroupList) groups; /* A group has [0..n] groups */
|
|---|
| 95 | DPQ_HEAD(PlayerList) players; /* A group has [0..n] players */
|
|---|
| 96 |
|
|---|
| 97 | DPID idGroupOwner; /* ID of player who owns the group */
|
|---|
| 98 |
|
|---|
| 99 | DWORD dwFlags; /* Flags describing anything special about the group */
|
|---|
| 100 |
|
|---|
| 101 | DPID dpid;
|
|---|
| 102 | DPNAME name;
|
|---|
| 103 |
|
|---|
| 104 | /* View of local data */
|
|---|
| 105 | LPVOID lpLocalData;
|
|---|
| 106 | DWORD dwLocalDataSize;
|
|---|
| 107 |
|
|---|
| 108 | /* View of remote data */
|
|---|
| 109 | LPVOID lpRemoteData;
|
|---|
| 110 | DWORD dwRemoteDataSize;
|
|---|
| 111 | };
|
|---|
| 112 | typedef struct GroupData GroupData;
|
|---|
| 113 | typedef struct GroupData* lpGroupData;
|
|---|
| 114 |
|
|---|
| 115 | struct GroupList
|
|---|
| 116 | {
|
|---|
| 117 | DPQ_ENTRY(GroupList) groups;
|
|---|
| 118 |
|
|---|
| 119 | lpGroupData lpGData;
|
|---|
| 120 | };
|
|---|
| 121 | typedef struct GroupList* lpGroupList;
|
|---|
| 122 |
|
|---|
| 123 | struct DPMSG
|
|---|
| 124 | {
|
|---|
| 125 | DPQ_ENTRY( DPMSG ) msgs;
|
|---|
| 126 | DPMSG_GENERIC* msg;
|
|---|
| 127 | };
|
|---|
| 128 | typedef struct DPMSG* LPDPMSG;
|
|---|
| 129 |
|
|---|
| 130 | /* Contains all dp1 and dp2 data members */
|
|---|
| 131 | typedef struct tagDirectPlay2Data
|
|---|
| 132 | {
|
|---|
| 133 | BOOL bConnectionOpen;
|
|---|
| 134 |
|
|---|
| 135 | /* For async EnumSessions requests */
|
|---|
| 136 | HANDLE hEnumSessionThread;
|
|---|
| 137 | HANDLE hKillEnumSessionThreadEvent;
|
|---|
| 138 |
|
|---|
| 139 | LPVOID lpNameServerData; /* DPlay interface doesn't know contents */
|
|---|
| 140 |
|
|---|
| 141 | BOOL bHostInterface; /* Did this interface create the session */
|
|---|
| 142 |
|
|---|
| 143 | lpGroupData lpSysGroup; /* System group with _everything_ in it */
|
|---|
| 144 |
|
|---|
| 145 | LPDPSESSIONDESC2 lpSessionDesc;
|
|---|
| 146 |
|
|---|
| 147 | /* I/O Msg queues */
|
|---|
| 148 | DPQ_HEAD( DPMSG ) receiveMsgs; /* Msg receive queue */
|
|---|
| 149 | DPQ_HEAD( DPMSG ) sendMsgs; /* Msg send pending queue */
|
|---|
| 150 |
|
|---|
| 151 | /* Information about the service provider active on this connection */
|
|---|
| 152 | SPINITDATA spData;
|
|---|
| 153 |
|
|---|
| 154 | /* Our service provider */
|
|---|
| 155 | HMODULE hServiceProvider;
|
|---|
| 156 |
|
|---|
| 157 | BOOL bConnectionInitialized;
|
|---|
| 158 |
|
|---|
| 159 | /* Expected messages queue */
|
|---|
| 160 | DPQ_HEAD( tagDP_MSG_REPLY_STRUCT_LIST ) replysExpected;
|
|---|
| 161 | } DirectPlay2Data;
|
|---|
| 162 |
|
|---|
| 163 | typedef struct tagDirectPlay3Data
|
|---|
| 164 | {
|
|---|
| 165 | BOOL dummy;
|
|---|
| 166 | } DirectPlay3Data;
|
|---|
| 167 | typedef struct tagDirectPlay4Data
|
|---|
| 168 | {
|
|---|
| 169 | BOOL dummy;
|
|---|
| 170 | } DirectPlay4Data;
|
|---|
| 171 |
|
|---|
| 172 | #define DP_IMPL_FIELDS \
|
|---|
| 173 | ULONG ulInterfaceRef; \
|
|---|
| 174 | DirectPlayIUnknownData* unk; \
|
|---|
| 175 | DirectPlay2Data* dp2; \
|
|---|
| 176 | DirectPlay3Data* dp3; \
|
|---|
| 177 | DirectPlay4Data* dp4;
|
|---|
| 178 |
|
|---|
| 179 | struct IDirectPlay2Impl
|
|---|
| 180 | {
|
|---|
| 181 | ICOM_VFIELD(IDirectPlay2);
|
|---|
| 182 | DP_IMPL_FIELDS
|
|---|
| 183 | };
|
|---|
| 184 |
|
|---|
| 185 | struct IDirectPlay3Impl
|
|---|
| 186 | {
|
|---|
| 187 | ICOM_VFIELD(IDirectPlay3);
|
|---|
| 188 | DP_IMPL_FIELDS
|
|---|
| 189 | };
|
|---|
| 190 |
|
|---|
| 191 | struct IDirectPlay4Impl
|
|---|
| 192 | {
|
|---|
| 193 | ICOM_VFIELD(IDirectPlay4);
|
|---|
| 194 | DP_IMPL_FIELDS
|
|---|
| 195 | };
|
|---|
| 196 |
|
|---|
| 197 | /* Forward declarations of virtual tables */
|
|---|
| 198 | extern ICOM_VTABLE(IDirectPlay2) directPlay2AVT;
|
|---|
| 199 | extern ICOM_VTABLE(IDirectPlay3) directPlay3AVT;
|
|---|
| 200 | extern ICOM_VTABLE(IDirectPlay4) directPlay4AVT;
|
|---|
| 201 |
|
|---|
| 202 | extern ICOM_VTABLE(IDirectPlay2) directPlay2WVT;
|
|---|
| 203 | extern ICOM_VTABLE(IDirectPlay3) directPlay3WVT;
|
|---|
| 204 | extern ICOM_VTABLE(IDirectPlay4) directPlay4WVT;
|
|---|
| 205 |
|
|---|
| 206 |
|
|---|
| 207 | HRESULT DP_HandleMessage( IDirectPlay2Impl* This, LPCVOID lpMessageBody,
|
|---|
| 208 | DWORD dwMessageBodySize, LPCVOID lpMessageHeader,
|
|---|
| 209 | WORD wCommandId, WORD wVersion,
|
|---|
| 210 | LPVOID* lplpReply, LPDWORD lpdwMsgSize );
|
|---|
| 211 |
|
|---|
| 212 | /* DP SP external interfaces into DirectPlay */
|
|---|
| 213 | extern HRESULT DP_GetSPPlayerData( IDirectPlay2Impl* lpDP, DPID idPlayer, LPVOID* lplpData );
|
|---|
| 214 | extern HRESULT DP_SetSPPlayerData( IDirectPlay2Impl* lpDP, DPID idPlayer, LPVOID lpData );
|
|---|
| 215 |
|
|---|
| 216 | /* DP external interfaces to call into DPSP interface */
|
|---|
| 217 | extern LPVOID DPSP_CreateSPPlayerData(void);
|
|---|
| 218 |
|
|---|
| 219 | #endif /* __WINE_DPLAY_GLOBAL_INCLUDED */
|
|---|