• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*==========================================================================;
2  *
3  *  Copyright (C) 1994-1995 Microsoft Corporation.  All Rights Reserved.
4  *
5  *  File:       dplay.h
6  *  Content:    DirectPlay include file
7  *
8  ***************************************************************************/
9 
10 #ifndef __DPLAY_INCLUDED__
11 #define __DPLAY_INCLUDED__
12 #ifdef _WIN32
13 /* for DECLARE_INTERFACE and HRESULT. */
14 #include <ole2.h>
15 #endif
16 
17 #define _FACDP  0x877
18 #define MAKE_DPHRESULT( code )    MAKE_HRESULT( 1, _FACDP, code )
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #pragma pack(push, 1)
25 
26 
27 /*============================================================================
28  *
29  * DirectPlay Structures
30  *
31  * Various structures used to invoke DirectPlay.
32  *
33  *==========================================================================*/
34 
35 #ifdef __cplusplus
36 /* 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined */
37 struct IDirectPlay;
38 typedef struct IDirectPlay        FAR *LPDIRECTPLAY;
39 #else
40 typedef struct IDirectPlay        FAR *LPDIRECTPLAY;
41 #endif
42 
43 typedef DWORD DPID, FAR *LPDPID;
44 
45 typedef struct _DPCAPS
46 {
47     DWORD   dwSize;
48     DWORD   dwFlags;
49     DWORD   dwMaxBufferSize;
50     DWORD   dwMaxQueueSize;             // Function of DPlay, not SP.
51     DWORD   dwMaxPlayers;
52     DWORD   dwHundredBaud;              // 24 is 2400, 96 is 9600, etc.
53     DWORD   dwLatency;
54 } DPCAPS;
55 
56 typedef DPCAPS        FAR *LPDPCAPS;
57 
58 #define DPLONGNAMELEN           52
59 #define DPSHORTNAMELEN          20
60 #define DPSESSIONNAMELEN        32
61 #define DPPASSWORDLEN           16
62 #define DPUSERRESERVED          16
63 
64 typedef struct
65 {
66     DWORD   dwSize;
67     GUID    guidSession;                  // Id for Game.  Null is all games.
68     DWORD   dwSession;                    // session identifier
69     DWORD   dwMaxPlayers;                 // Maximum players allowed in game.
70     DWORD   dwCurrentPlayers;             // Current  players in Game.
71     DWORD   dwFlags;                      // DPOPEN_* flags
72     char    szSessionName[DPSESSIONNAMELEN];// Human readable name for Game
73     char    szUserField[DPUSERRESERVED];
74     DWORD   dwReserved1;                  // Reserved for future MS use.
75     char    szPassword[DPPASSWORDLEN];    // Password to be allowed into game.
76     DWORD   dwReserved2;                  // Reserved for future MS use.
77     DWORD   dwUser1;
78     DWORD   dwUser2;
79     DWORD   dwUser3;
80     DWORD   dwUser4;
81 } DPSESSIONDESC;
82 typedef DPSESSIONDESC FAR *LPDPSESSIONDESC;
83 
84 
85 /*
86  * Create API
87  */
88 typedef BOOL (FAR PASCAL * LPDPENUMDPCALLBACK)(
89     LPGUID              lpSPGuid,
90     LPSTR               lpFriendlyName,
91     DWORD               dwMajorVersion,
92     DWORD               dwMinorVersion,
93     LPVOID              lpContext);
94 
95 typedef BOOL (FAR PASCAL * LPDPENUMSESSIONSCALLBACK)(
96     LPDPSESSIONDESC     lpDPSGameDesc,
97     LPVOID              lpContext,
98     LPDWORD             lpdwTimeOut,
99     DWORD               dwFlags);
100 
101 
102 
103 extern HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY FAR *lplpDP, IUnknown FAR *pUnk);
104 extern HRESULT WINAPI DirectPlayEnumerate( LPDPENUMDPCALLBACK, LPVOID );
105 
106 
107 /* Player enumeration callback prototype */
108 typedef BOOL (FAR PASCAL *LPDPENUMPLAYERSCALLBACK)(
109     DPID    dpId,
110     LPSTR   lpFriendlyName,
111     LPSTR   lpFormalName,
112     DWORD   dwFlags,
113     LPVOID  lpContext );
114 
115 /*
116  * IDirectPlay
117  */
118 #undef INTERFACE
119 #define INTERFACE IDirectPlay
120 #ifdef _WIN32
DECLARE_INTERFACE_(IDirectPlay,IUnknown)121 DECLARE_INTERFACE_( IDirectPlay, IUnknown )
122 {
123     /*** IUnknown methods ***/
124     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
125     STDMETHOD_(ULONG,AddRef)        (THIS)  PURE;
126     STDMETHOD_(ULONG,Release)       (THIS) PURE;
127     /*** IDirectPlay methods ***/
128     STDMETHOD(AddPlayerToGroup)     (THIS_ DPID, DPID) PURE;
129     STDMETHOD(Close)                (THIS) PURE;
130     STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPSTR,LPSTR,LPHANDLE) PURE;
131     STDMETHOD(CreateGroup)          (THIS_ LPDPID,LPSTR,LPSTR) PURE;
132     STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE;
133     STDMETHOD(DestroyPlayer)        (THIS_ DPID) PURE;
134     STDMETHOD(DestroyGroup)         (THIS_ DPID) PURE;
135     STDMETHOD(EnableNewPlayers)     (THIS_ BOOL) PURE;
136     STDMETHOD(EnumGroupPlayers)     (THIS_ DPID, LPDPENUMPLAYERSCALLBACK,LPVOID,DWORD) PURE;
137     STDMETHOD(EnumGroups)           (THIS_ DWORD, LPDPENUMPLAYERSCALLBACK,LPVOID,DWORD) PURE;
138     STDMETHOD(EnumPlayers)          (THIS_ DWORD, LPDPENUMPLAYERSCALLBACK,LPVOID,DWORD) PURE;
139     STDMETHOD(EnumSessions)         (THIS_ LPDPSESSIONDESC,DWORD,LPDPENUMSESSIONSCALLBACK,LPVOID,DWORD) PURE;
140     STDMETHOD(GetCaps)              (THIS_ LPDPCAPS) PURE;
141     STDMETHOD(GetMessageCount)      (THIS_ DPID, LPDWORD) PURE;
142     STDMETHOD(GetPlayerCaps)        (THIS_ DPID, LPDPCAPS) PURE;
143     STDMETHOD(GetPlayerName)        (THIS_ DPID,LPSTR,LPDWORD,LPSTR,LPDWORD) PURE;
144     STDMETHOD(Initialize)           (THIS_ LPGUID) PURE;
145     STDMETHOD(Open)                 (THIS_ LPDPSESSIONDESC) PURE;
146     STDMETHOD(Receive)              (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE;
147     STDMETHOD(SaveSession)          (THIS_ LPSTR) PURE;
148     STDMETHOD(Send)                 (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE;
149     STDMETHOD(SetPlayerName)        (THIS_ DPID,LPSTR,LPSTR) PURE;
150 };
151 #endif
152 
153 
154 
155 
156 /****************************************************************************
157  *
158  * DIRECTPLAY ERRORS
159  *
160  * Errors are represented by negative values and cannot be combined.
161  *
162  ****************************************************************************/
163 #define DP_OK                           0
164 #define DPERR_ALREADYINITIALIZED        MAKE_DPHRESULT(   5 )
165 #define DPERR_ACCESSDENIED              MAKE_DPHRESULT(  10 )
166 #define DPERR_ACTIVEPLAYERS             MAKE_DPHRESULT(  20 )
167 #define DPERR_BUFFERTOOSMALL            MAKE_DPHRESULT(  30 )
168 #define DPERR_CANTADDPLAYER             MAKE_DPHRESULT(  40 )
169 #define DPERR_CANTCREATEGROUP           MAKE_DPHRESULT(  50 )
170 #define DPERR_CANTCREATEPLAYER          MAKE_DPHRESULT(  60 )
171 #define DPERR_CANTCREATESESSION         MAKE_DPHRESULT(  70 )
172 #define DPERR_CAPSNOTAVAILABLEYET       MAKE_DPHRESULT(  80 )
173 #define DPERR_EXCEPTION                 MAKE_DPHRESULT(  90 )
174 #define DPERR_GENERIC                   E_FAIL
175 
176 #define DPERR_INVALIDFLAGS              MAKE_DPHRESULT( 120 )
177 #define DPERR_INVALIDOBJECT             MAKE_DPHRESULT( 130 )
178 #define DPERR_INVALIDPARAM              E_INVALIDARG
179 #define DPERR_INVALIDPARAMS             DPERR_INVALIDPARAM
180 #define DPERR_INVALIDPLAYER             MAKE_DPHRESULT( 150 )
181 #define DPERR_NOCAPS                    MAKE_DPHRESULT( 160 )
182 #define DPERR_NOCONNECTION              MAKE_DPHRESULT( 170 )
183 #define DPERR_NOMEMORY                  E_OUTOFMEMORY
184 #define DPERR_OUTOFMEMORY               DPERR_NOMEMORY
185 #define DPERR_NOMESSAGES                MAKE_DPHRESULT( 190 )
186 #define DPERR_NONAMESERVERFOUND         MAKE_DPHRESULT( 200 )
187 #define DPERR_NOPLAYERS                 MAKE_DPHRESULT( 210 )
188 #define DPERR_NOSESSIONS                MAKE_DPHRESULT( 220 )
189 #define DPERR_SENDTOOBIG                MAKE_DPHRESULT( 230 )
190 #define DPERR_TIMEOUT                   MAKE_DPHRESULT( 240 )
191 #define DPERR_UNAVAILABLE               MAKE_DPHRESULT( 250 )
192 #define DPERR_UNSUPPORTED               E_NOTIMPL
193 #define DPERR_BUSY                      MAKE_DPHRESULT( 270 )
194 #define DPERR_USERCANCEL                MAKE_DPHRESULT( 280 )
195 
196 
197 #define DPOPEN_OPENSESSION          0x00000001
198 #define DPOPEN_CREATESESSION        0x00000002
199 
200 #define DPSEND_GUARANTEE            0x00000001
201 #define DPSEND_HIGHPRIORITY         0x00000002
202 #define DPSEND_TRYONCE              0x00000004
203 
204 #define DPRECEIVE_ALL               0x00000001
205 #define DPRECEIVE_TOPLAYER          0x00000002
206 #define DPRECEIVE_FROMPLAYER        0x00000004
207 #define DPRECEIVE_PEEK              0x00000008
208 
209 #define DPCAPS_NAMESERVICE          0x00000001 // A name server is supported.
210 #define DPCAPS_NAMESERVER           0x00000002 // You are the name server.
211 #define DPCAPS_GUARANTEED           0x00000004 // SP's don't have to implement guarantees.
212 
213 #define DPENUMSESSIONS_AVAILABLE    0x00000001 // All games that match password (if given)
214                                                // and have openings.
215 #define DPENUMSESSIONS_ALL          0x00000002
216 #define DPENUMSESSIONS_PREVIOUS     0x00000004
217 
218 #define DPENUMPLAYERS_ALL           0x00000000
219 #define DPENUMPLAYERS_PREVIOUS      0x00000004
220 #define DPENUMPLAYERS_LOCAL         0x00000008
221 #define DPENUMPLAYERS_REMOTE        0x00000010
222 #define DPENUMPLAYERS_GROUP         0x00000020
223 #define DPENUMPLAYERS_SESSION       0x00000080
224 
225 //
226 // This flag is set on the enumsessions callback when the time out has occured.
227 // This means that there is no session data for this callback.
228 // If lpdwTimeOut is set to a non-zero value and the EnumSessionsCallback returns
229 // TRUE then EnumSessions will continue until the next timeout occurs.
230 // Timeouts are in milliseconds.
231 
232 #define DPESC_TIMEDOUT              0x00000001
233 
234 
235 //
236 // System message structures and types.
237 //
238 // System messages have a leading 4 byte type code to identify the message.
239 // an app knows it is a system message because it is addressed 'To' player 0.
240 //
241 
242 
243 #define DPSYS_ADDPLAYER               0x0003  // DPMSG_ADDPLAYER
244 #define DPSYS_DELETEPLAYER            0x0005  // DPMSG_DELETEPLAYER
245 
246 #define DPSYS_ADDPLAYERTOGROUP        0x0007  // DPMSG_GROUPADD
247 
248 #define DPSYS_INVITE                  0x000e  // DPMSG_INVITE, Net only.
249 
250 #define DPSYS_DELETEGROUP             0x0020  // DPMSG_DELETEPLAYER
251 #define DPSYS_DELETEPLAYERFROMGRP     0x0021  // DPMSG_GROUPDELETE
252 #define DPSYS_SESSIONLOST             0x0031
253 
254 #define DPSYS_CONNECT                 0x484b  // DPMSG_GENERIC
255 
256 
257 
258 typedef struct
259 {
260     DWORD       dwType;
261     DWORD       dwPlayerType;
262     DPID        dpId;
263     char        szLongName[DPLONGNAMELEN];
264     char        szShortName[DPSHORTNAMELEN];
265     DWORD       dwCurrentPlayers;
266 }   DPMSG_ADDPLAYER;
267 
268 typedef DPMSG_ADDPLAYER DPMSG_ADDGROUP;
269 
270 typedef struct
271 {
272     DWORD       dwType;
273     DPID        dpIdGroup;
274     DPID        dpIdPlayer;
275 } DPMSG_GROUPADD;
276 
277 typedef DPMSG_GROUPADD DPMSG_GROUPDELETE;
278 typedef struct
279 {
280     DWORD       dwType;
281     DPID        dpId;
282 } DPMSG_DELETEPLAYER;
283 
284 typedef struct
285 {
286     DWORD           dwType;
287     DPSESSIONDESC   dpsDesc;
288 } DPMSG_INVITE;
289 
290 
291 
292 typedef struct
293 {
294     DWORD           dwType;
295 } DPMSG_GENERIC;
296 
297 #pragma pack(pop)
298 
299 
300 DEFINE_GUID( IID_IDirectPlay, 0x5454e9a0, 0xdb65, 0x11ce, 0x92, 0x1c, 0x00, 0xaa, 0x00, 0x6c, 0x49, 0x72);
301 
302 
303 
304 #ifdef __cplusplus
305 };
306 #endif
307 
308 #endif
309