dplayx: Merge the IDirectPlay4_AddPlayerToGroup helper.
This commit is contained in:
parent
06edee2da7
commit
5dc2b8f69c
|
@ -106,9 +106,6 @@ static HRESULT DP_IF_CreateGroupInGroup
|
||||||
( IDirectPlay3Impl* This, LPVOID lpMsgHdr, DPID idParentGroup,
|
( IDirectPlay3Impl* This, LPVOID lpMsgHdr, DPID idParentGroup,
|
||||||
LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData,
|
LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData,
|
||||||
DWORD dwDataSize, DWORD dwFlags, BOOL bAnsi );
|
DWORD dwDataSize, DWORD dwFlags, BOOL bAnsi );
|
||||||
static HRESULT DP_IF_AddPlayerToGroup
|
|
||||||
( IDirectPlay2Impl* This, LPVOID lpMsgHdr, DPID idGroup,
|
|
||||||
DPID idPlayer, BOOL bAnsi );
|
|
||||||
static HRESULT DP_SetSessionDesc
|
static HRESULT DP_SetSessionDesc
|
||||||
( IDirectPlay2Impl* This, LPCDPSESSIONDESC2 lpSessDesc,
|
( IDirectPlay2Impl* This, LPCDPSESSIONDESC2 lpSessDesc,
|
||||||
DWORD dwFlags, BOOL bInitial, BOOL bAnsi );
|
DWORD dwFlags, BOOL bInitial, BOOL bAnsi );
|
||||||
|
@ -428,86 +425,6 @@ HRESULT DP_HandleMessage( IDirectPlay2Impl* This, LPCVOID lpcMessageBody,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static HRESULT DP_IF_AddPlayerToGroup
|
|
||||||
( IDirectPlay2Impl* This, LPVOID lpMsgHdr, DPID idGroup,
|
|
||||||
DPID idPlayer, BOOL bAnsi )
|
|
||||||
{
|
|
||||||
lpGroupData lpGData;
|
|
||||||
lpPlayerList lpPList;
|
|
||||||
lpPlayerList lpNewPList;
|
|
||||||
|
|
||||||
TRACE( "(%p)->(%p,0x%08x,0x%08x,%u)\n",
|
|
||||||
This, lpMsgHdr, idGroup, idPlayer, bAnsi );
|
|
||||||
|
|
||||||
if( This->dp2->connectionInitialized == NO_PROVIDER )
|
|
||||||
{
|
|
||||||
return DPERR_UNINITIALIZED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Find the group */
|
|
||||||
if( ( lpGData = DP_FindAnyGroup( This, idGroup ) ) == NULL )
|
|
||||||
{
|
|
||||||
return DPERR_INVALIDGROUP;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Find the player */
|
|
||||||
if( ( lpPList = DP_FindPlayer( This, idPlayer ) ) == NULL )
|
|
||||||
{
|
|
||||||
return DPERR_INVALIDPLAYER;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create a player list (ie "shortcut" ) */
|
|
||||||
lpNewPList = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof( *lpNewPList ) );
|
|
||||||
if( lpNewPList == NULL )
|
|
||||||
{
|
|
||||||
return DPERR_CANTADDPLAYER;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add the shortcut */
|
|
||||||
lpPList->lpPData->uRef++;
|
|
||||||
lpNewPList->lpPData = lpPList->lpPData;
|
|
||||||
|
|
||||||
/* Add the player to the list of players for this group */
|
|
||||||
DPQ_INSERT(lpGData->players,lpNewPList,players);
|
|
||||||
|
|
||||||
/* Let the SP know that we've added a player to the group */
|
|
||||||
if( This->dp2->spData.lpCB->AddPlayerToGroup )
|
|
||||||
{
|
|
||||||
DPSP_ADDPLAYERTOGROUPDATA data;
|
|
||||||
|
|
||||||
TRACE( "Calling SP AddPlayerToGroup\n" );
|
|
||||||
|
|
||||||
data.idPlayer = idPlayer;
|
|
||||||
data.idGroup = idGroup;
|
|
||||||
data.lpISP = This->dp2->spData.lpISP;
|
|
||||||
|
|
||||||
(*This->dp2->spData.lpCB->AddPlayerToGroup)( &data );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Inform all other peers of the addition of player to the group. If there are
|
|
||||||
* no peers keep this event quiet.
|
|
||||||
* Also, if this event was the result of another machine sending it to us,
|
|
||||||
* don't bother rebroadcasting it.
|
|
||||||
*/
|
|
||||||
if( ( lpMsgHdr == NULL ) &&
|
|
||||||
This->dp2->lpSessionDesc &&
|
|
||||||
( This->dp2->lpSessionDesc->dwFlags & DPSESSION_MULTICASTSERVER ) )
|
|
||||||
{
|
|
||||||
DPMSG_ADDPLAYERTOGROUP msg;
|
|
||||||
msg.dwType = DPSYS_ADDPLAYERTOGROUP;
|
|
||||||
|
|
||||||
msg.dpIdGroup = idGroup;
|
|
||||||
msg.dpIdPlayer = idPlayer;
|
|
||||||
|
|
||||||
/* FIXME: Correct to just use send effectively? */
|
|
||||||
/* FIXME: Should size include data w/ message or just message "header" */
|
|
||||||
/* FIXME: Check return code */
|
|
||||||
DP_SendEx( This, DPID_SERVERPLAYER, DPID_ALLPLAYERS, 0, &msg, sizeof( msg ), 0, 0, NULL, NULL, bAnsi );
|
|
||||||
}
|
|
||||||
|
|
||||||
return DP_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectPlay4AImpl_QueryInterface( IDirectPlay4A *iface, REFIID riid,
|
static HRESULT WINAPI IDirectPlay4AImpl_QueryInterface( IDirectPlay4A *iface, REFIID riid,
|
||||||
void **ppv )
|
void **ppv )
|
||||||
{
|
{
|
||||||
|
@ -618,18 +535,82 @@ static ULONG WINAPI IDirectPlay4Impl_Release(IDirectPlay4 *iface)
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectPlay4AImpl_AddPlayerToGroup( IDirectPlay4A *iface, DPID idGroup,
|
static HRESULT WINAPI IDirectPlay4AImpl_AddPlayerToGroup( IDirectPlay4A *iface, DPID group,
|
||||||
DPID idPlayer )
|
DPID player )
|
||||||
{
|
{
|
||||||
IDirectPlayImpl *This = impl_from_IDirectPlay4A( iface );
|
IDirectPlayImpl *This = impl_from_IDirectPlay4A( iface );
|
||||||
return DP_IF_AddPlayerToGroup( This, NULL, idGroup, idPlayer, TRUE );
|
return IDirectPlayX_AddPlayerToGroup( &This->IDirectPlay4_iface, group, player );
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI DirectPlay2WImpl_AddPlayerToGroup
|
static HRESULT WINAPI IDirectPlay4Impl_AddPlayerToGroup( IDirectPlay4 *iface, DPID group,
|
||||||
( LPDIRECTPLAY2 iface, DPID idGroup, DPID idPlayer )
|
DPID player )
|
||||||
{
|
{
|
||||||
IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
|
IDirectPlayImpl *This = impl_from_IDirectPlay4( iface );
|
||||||
return DP_IF_AddPlayerToGroup( This, NULL, idGroup, idPlayer, FALSE );
|
lpGroupData gdata;
|
||||||
|
lpPlayerList plist;
|
||||||
|
lpPlayerList newplist;
|
||||||
|
|
||||||
|
TRACE( "(%p)->(0x%08x,0x%08x)\n", This, group, player );
|
||||||
|
|
||||||
|
if ( This->dp2->connectionInitialized == NO_PROVIDER )
|
||||||
|
return DPERR_UNINITIALIZED;
|
||||||
|
|
||||||
|
/* Find the group */
|
||||||
|
if ( ( gdata = DP_FindAnyGroup( This, group ) ) == NULL )
|
||||||
|
return DPERR_INVALIDGROUP;
|
||||||
|
|
||||||
|
/* Find the player */
|
||||||
|
if ( ( plist = DP_FindPlayer( This, player ) ) == NULL )
|
||||||
|
return DPERR_INVALIDPLAYER;
|
||||||
|
|
||||||
|
/* Create a player list (ie "shortcut" ) */
|
||||||
|
newplist = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof( *newplist ) );
|
||||||
|
if ( !newplist )
|
||||||
|
return DPERR_CANTADDPLAYER;
|
||||||
|
|
||||||
|
/* Add the shortcut */
|
||||||
|
plist->lpPData->uRef++;
|
||||||
|
newplist->lpPData = plist->lpPData;
|
||||||
|
|
||||||
|
/* Add the player to the list of players for this group */
|
||||||
|
DPQ_INSERT(gdata->players, newplist, players);
|
||||||
|
|
||||||
|
/* Let the SP know that we've added a player to the group */
|
||||||
|
if ( This->dp2->spData.lpCB->AddPlayerToGroup )
|
||||||
|
{
|
||||||
|
DPSP_ADDPLAYERTOGROUPDATA data;
|
||||||
|
|
||||||
|
TRACE( "Calling SP AddPlayerToGroup\n" );
|
||||||
|
|
||||||
|
data.idPlayer = player;
|
||||||
|
data.idGroup = group;
|
||||||
|
data.lpISP = This->dp2->spData.lpISP;
|
||||||
|
|
||||||
|
(*This->dp2->spData.lpCB->AddPlayerToGroup)( &data );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inform all other peers of the addition of player to the group. If there are
|
||||||
|
* no peers keep this event quiet.
|
||||||
|
* Also, if this event was the result of another machine sending it to us,
|
||||||
|
* don't bother rebroadcasting it.
|
||||||
|
*/
|
||||||
|
if ( This->dp2->lpSessionDesc &&
|
||||||
|
( This->dp2->lpSessionDesc->dwFlags & DPSESSION_MULTICASTSERVER ) )
|
||||||
|
{
|
||||||
|
DPMSG_ADDPLAYERTOGROUP msg;
|
||||||
|
msg.dwType = DPSYS_ADDPLAYERTOGROUP;
|
||||||
|
|
||||||
|
msg.dpIdGroup = group;
|
||||||
|
msg.dpIdPlayer = player;
|
||||||
|
|
||||||
|
/* FIXME: Correct to just use send effectively? */
|
||||||
|
/* FIXME: Should size include data w/ message or just message "header" */
|
||||||
|
/* FIXME: Check return code */
|
||||||
|
IDirectPlayX_SendEx( iface, DPID_SERVERPLAYER, DPID_ALLPLAYERS, 0, &msg, sizeof( msg ),
|
||||||
|
0, 0, NULL, NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
return DP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectPlay4AImpl_Close( IDirectPlay4A *iface )
|
static HRESULT WINAPI IDirectPlay4AImpl_Close( IDirectPlay4A *iface )
|
||||||
|
@ -4284,8 +4265,7 @@ static const IDirectPlay4Vtbl dp4_vt =
|
||||||
IDirectPlay4Impl_QueryInterface,
|
IDirectPlay4Impl_QueryInterface,
|
||||||
IDirectPlay4Impl_AddRef,
|
IDirectPlay4Impl_AddRef,
|
||||||
IDirectPlay4Impl_Release,
|
IDirectPlay4Impl_Release,
|
||||||
|
IDirectPlay4Impl_AddPlayerToGroup,
|
||||||
XCAST(AddPlayerToGroup)DirectPlay2WImpl_AddPlayerToGroup,
|
|
||||||
IDirectPlay4Impl_Close,
|
IDirectPlay4Impl_Close,
|
||||||
XCAST(CreateGroup)DirectPlay2WImpl_CreateGroup,
|
XCAST(CreateGroup)DirectPlay2WImpl_CreateGroup,
|
||||||
XCAST(CreatePlayer)DirectPlay2WImpl_CreatePlayer,
|
XCAST(CreatePlayer)DirectPlay2WImpl_CreatePlayer,
|
||||||
|
|
Loading…
Reference in New Issue