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 21extern "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 */ 37struct IDirectPlay; 38typedef struct IDirectPlay FAR *LPDIRECTPLAY; 39#else 40typedef struct IDirectPlay FAR *LPDIRECTPLAY; 41#endif 42 43typedef DWORD DPID, FAR *LPDPID; 44 45typedef 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 56typedef 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 64typedef 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; 82typedef DPSESSIONDESC FAR *LPDPSESSIONDESC; 83 84 85/* 86 * Create API 87 */ 88typedef BOOL (FAR PASCAL * LPDPENUMDPCALLBACK)( 89 LPGUID lpSPGuid, 90 LPSTR lpFriendlyName, 91 DWORD dwMajorVersion, 92 DWORD dwMinorVersion, 93 LPVOID lpContext); 94 95typedef BOOL (FAR PASCAL * LPDPENUMSESSIONSCALLBACK)( 96 LPDPSESSIONDESC lpDPSGameDesc, 97 LPVOID lpContext, 98 LPDWORD lpdwTimeOut, 99 DWORD dwFlags); 100 101 102 103extern HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY FAR *lplpDP, IUnknown FAR *pUnk); 104extern HRESULT WINAPI DirectPlayEnumerate( LPDPENUMDPCALLBACK, LPVOID ); 105 106 107/* Player enumeration callback prototype */ 108typedef 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 121DECLARE_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 258typedef 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 268typedef DPMSG_ADDPLAYER DPMSG_ADDGROUP; 269 270typedef struct 271{ 272 DWORD dwType; 273 DPID dpIdGroup; 274 DPID dpIdPlayer; 275} DPMSG_GROUPADD; 276 277typedef DPMSG_GROUPADD DPMSG_GROUPDELETE; 278typedef struct 279{ 280 DWORD dwType; 281 DPID dpId; 282} DPMSG_DELETEPLAYER; 283 284typedef struct 285{ 286 DWORD dwType; 287 DPSESSIONDESC dpsDesc; 288} DPMSG_INVITE; 289 290 291 292typedef struct 293{ 294 DWORD dwType; 295} DPMSG_GENERIC; 296 297#pragma pack(pop) 298 299 300DEFINE_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