| /* This contains the implementation of the Lobby Service |
| * Providers interface required to communicate with Direct Play |
| * |
| * Copyright 2001 Peter Hunnisett |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include "winerror.h" |
| #include "wine/debug.h" |
| |
| #include "lobbysp.h" |
| #include "dplay_global.h" |
| |
| WINE_DEFAULT_DEBUG_CHANNEL(dplay); |
| |
| typedef struct IDPLobbySPImpl |
| { |
| IDPLobbySP IDPLobbySP_iface; |
| LONG ref; |
| IDirectPlayImpl *dplay; |
| } IDPLobbySPImpl; |
| |
| static inline IDPLobbySPImpl *impl_from_IDPLobbySP(IDPLobbySP *iface) |
| { |
| return CONTAINING_RECORD(iface, IDPLobbySPImpl, IDPLobbySP_iface); |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_QueryInterface( IDPLobbySP *iface, REFIID riid, |
| void **ppv ) |
| { |
| TRACE("(%p)->(%s,%p)\n", iface, debugstr_guid( riid ), ppv ); |
| |
| if ( IsEqualGUID( &IID_IUnknown, riid ) || IsEqualGUID( &IID_IDPLobbySP, riid ) ) |
| { |
| *ppv = iface; |
| IDPLobbySP_AddRef(iface); |
| return S_OK; |
| } |
| |
| FIXME("Unsupported interface %s\n", debugstr_guid(riid)); |
| *ppv = NULL; |
| return E_NOINTERFACE; |
| } |
| |
| static ULONG WINAPI IDPLobbySPImpl_AddRef( IDPLobbySP *iface ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| ULONG ref = InterlockedIncrement( &This->ref ); |
| |
| TRACE( "(%p) ref=%d\n", This, ref ); |
| |
| return ref; |
| } |
| |
| static ULONG WINAPI IDPLobbySPImpl_Release( IDPLobbySP *iface ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| ULONG ref = InterlockedDecrement( &This->ref ); |
| |
| TRACE( "(%p) ref=%d\n", This, ref ); |
| |
| if( !ref ) |
| HeapFree( GetProcessHeap(), 0, This ); |
| |
| return ref; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_AddGroupToGroup( IDPLobbySP *iface, |
| SPDATA_ADDREMOTEGROUPTOGROUP *argtg ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, argtg ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_AddPlayerToGroup( IDPLobbySP *iface, |
| SPDATA_ADDREMOTEPLAYERTOGROUP *arptg ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, arptg ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_CreateGroup( IDPLobbySP *iface, |
| SPDATA_CREATEREMOTEGROUP *crg ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, crg ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_CreateGroupInGroup( IDPLobbySP *iface, |
| SPDATA_CREATEREMOTEGROUPINGROUP *crgig ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, crgig ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_DeleteGroupFromGroup( IDPLobbySP *iface, |
| SPDATA_DELETEREMOTEGROUPFROMGROUP *drgfg ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, drgfg ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_DeletePlayerFromGroup( IDPLobbySP *iface, |
| SPDATA_DELETEREMOTEPLAYERFROMGROUP *drpfg ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, drpfg ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_DestroyGroup( IDPLobbySP *iface, |
| SPDATA_DESTROYREMOTEGROUP *drg ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, drg ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_EnumSessionsResponse( IDPLobbySP *iface, |
| SPDATA_ENUMSESSIONSRESPONSE *er ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, er ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_GetSPDataPointer( IDPLobbySP *iface, LPVOID* lplpData ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, lplpData ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_HandleMessage( IDPLobbySP *iface, SPDATA_HANDLEMESSAGE *hm ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, hm ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_SendChatMessage( IDPLobbySP *iface, |
| SPDATA_CHATMESSAGE *cm ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, cm ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_SetGroupName( IDPLobbySP *iface, |
| SPDATA_SETREMOTEGROUPNAME *srgn ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, srgn ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_SetPlayerName( IDPLobbySP *iface, |
| SPDATA_SETREMOTEPLAYERNAME *srpn ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, srpn ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_SetSessionDesc( IDPLobbySP *iface, |
| SPDATA_SETSESSIONDESC *ssd ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, ssd ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_SetSPDataPointer( IDPLobbySP *iface, void *lpData ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, lpData ); |
| return DP_OK; |
| } |
| |
| static HRESULT WINAPI IDPLobbySPImpl_StartSession( IDPLobbySP *iface, |
| SPDATA_STARTSESSIONCOMMAND *ssc ) |
| { |
| IDPLobbySPImpl *This = impl_from_IDPLobbySP( iface ); |
| FIXME( "(%p)->(%p):stub\n", This, ssc ); |
| return DP_OK; |
| } |
| |
| |
| static const IDPLobbySPVtbl dpLobbySPVT = |
| { |
| IDPLobbySPImpl_QueryInterface, |
| IDPLobbySPImpl_AddRef, |
| IDPLobbySPImpl_Release, |
| IDPLobbySPImpl_AddGroupToGroup, |
| IDPLobbySPImpl_AddPlayerToGroup, |
| IDPLobbySPImpl_CreateGroup, |
| IDPLobbySPImpl_CreateGroupInGroup, |
| IDPLobbySPImpl_DeleteGroupFromGroup, |
| IDPLobbySPImpl_DeletePlayerFromGroup, |
| IDPLobbySPImpl_DestroyGroup, |
| IDPLobbySPImpl_EnumSessionsResponse, |
| IDPLobbySPImpl_GetSPDataPointer, |
| IDPLobbySPImpl_HandleMessage, |
| IDPLobbySPImpl_SendChatMessage, |
| IDPLobbySPImpl_SetGroupName, |
| IDPLobbySPImpl_SetPlayerName, |
| IDPLobbySPImpl_SetSessionDesc, |
| IDPLobbySPImpl_SetSPDataPointer, |
| IDPLobbySPImpl_StartSession |
| }; |
| |
| HRESULT dplobbysp_create( REFIID riid, void **ppv, IDirectPlayImpl *dp ) |
| { |
| IDPLobbySPImpl *obj; |
| HRESULT hr; |
| |
| TRACE( "(%s, %p)\n", debugstr_guid( riid ), ppv ); |
| |
| *ppv = NULL; |
| obj = HeapAlloc( GetProcessHeap(), 0, sizeof( *obj ) ); |
| if ( !obj ) |
| return DPERR_OUTOFMEMORY; |
| |
| obj->IDPLobbySP_iface.lpVtbl = &dpLobbySPVT; |
| obj->ref = 1; |
| obj->dplay = dp; |
| |
| hr = IDPLobbySP_QueryInterface( &obj->IDPLobbySP_iface, riid, ppv ); |
| IDPLobbySP_Release( &obj->IDPLobbySP_iface ); |
| |
| return hr; |
| } |