1 /* This contains the implementation of the Lobby Service
2 * Providers interface required to communicate with Direct Play
4 * Copyright 2001 Peter Hunnisett
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include "dplayx_global.h"
24 typedef struct IDPLobbySPImpl
26 IDPLobbySP IDPLobbySP_iface
;
28 IDirectPlayImpl
*dplay
;
31 static inline IDPLobbySPImpl
*impl_from_IDPLobbySP(IDPLobbySP
*iface
)
33 return CONTAINING_RECORD(iface
, IDPLobbySPImpl
, IDPLobbySP_iface
);
36 static HRESULT WINAPI
IDPLobbySPImpl_QueryInterface( IDPLobbySP
*iface
, REFIID riid
,
39 TRACE("(%p)->(%s,%p)\n", iface
, debugstr_guid( riid
), ppv
);
41 if ( IsEqualGUID( &IID_IUnknown
, riid
) || IsEqualGUID( &IID_IDPLobbySP
, riid
) )
44 IDPLobbySP_AddRef(iface
);
48 FIXME("Unsupported interface %s\n", debugstr_guid(riid
));
53 static ULONG WINAPI
IDPLobbySPImpl_AddRef( IDPLobbySP
*iface
)
55 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
56 ULONG ref
= InterlockedIncrement( &This
->ref
);
58 TRACE( "(%p) ref=%d\n", This
, ref
);
63 static ULONG WINAPI
IDPLobbySPImpl_Release( IDPLobbySP
*iface
)
65 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
66 ULONG ref
= InterlockedDecrement( &This
->ref
);
68 TRACE( "(%p) ref=%d\n", This
, ref
);
71 HeapFree( GetProcessHeap(), 0, This
);
76 static HRESULT WINAPI
IDPLobbySPImpl_AddGroupToGroup( IDPLobbySP
*iface
,
77 SPDATA_ADDREMOTEGROUPTOGROUP
*argtg
)
79 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
80 FIXME( "(%p)->(%p):stub\n", This
, argtg
);
84 static HRESULT WINAPI
IDPLobbySPImpl_AddPlayerToGroup( IDPLobbySP
*iface
,
85 SPDATA_ADDREMOTEPLAYERTOGROUP
*arptg
)
87 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
88 FIXME( "(%p)->(%p):stub\n", This
, arptg
);
92 static HRESULT WINAPI
IDPLobbySPImpl_CreateGroup( IDPLobbySP
*iface
,
93 SPDATA_CREATEREMOTEGROUP
*crg
)
95 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
96 FIXME( "(%p)->(%p):stub\n", This
, crg
);
100 static HRESULT WINAPI
IDPLobbySPImpl_CreateGroupInGroup( IDPLobbySP
*iface
,
101 SPDATA_CREATEREMOTEGROUPINGROUP
*crgig
)
103 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
104 FIXME( "(%p)->(%p):stub\n", This
, crgig
);
108 static HRESULT WINAPI
IDPLobbySPImpl_DeleteGroupFromGroup( IDPLobbySP
*iface
,
109 SPDATA_DELETEREMOTEGROUPFROMGROUP
*drgfg
)
111 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
112 FIXME( "(%p)->(%p):stub\n", This
, drgfg
);
116 static HRESULT WINAPI
IDPLobbySPImpl_DeletePlayerFromGroup( IDPLobbySP
*iface
,
117 SPDATA_DELETEREMOTEPLAYERFROMGROUP
*drpfg
)
119 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
120 FIXME( "(%p)->(%p):stub\n", This
, drpfg
);
124 static HRESULT WINAPI
IDPLobbySPImpl_DestroyGroup( IDPLobbySP
*iface
,
125 SPDATA_DESTROYREMOTEGROUP
*drg
)
127 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
128 FIXME( "(%p)->(%p):stub\n", This
, drg
);
132 static HRESULT WINAPI
IDPLobbySPImpl_EnumSessionsResponse( IDPLobbySP
*iface
,
133 SPDATA_ENUMSESSIONSRESPONSE
*er
)
135 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
136 FIXME( "(%p)->(%p):stub\n", This
, er
);
140 static HRESULT WINAPI
IDPLobbySPImpl_GetSPDataPointer( IDPLobbySP
*iface
, LPVOID
* lplpData
)
142 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
143 FIXME( "(%p)->(%p):stub\n", This
, lplpData
);
147 static HRESULT WINAPI
IDPLobbySPImpl_HandleMessage( IDPLobbySP
*iface
, SPDATA_HANDLEMESSAGE
*hm
)
149 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
150 FIXME( "(%p)->(%p):stub\n", This
, hm
);
154 static HRESULT WINAPI
IDPLobbySPImpl_SendChatMessage( IDPLobbySP
*iface
,
155 SPDATA_CHATMESSAGE
*cm
)
157 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
158 FIXME( "(%p)->(%p):stub\n", This
, cm
);
162 static HRESULT WINAPI
IDPLobbySPImpl_SetGroupName( IDPLobbySP
*iface
,
163 SPDATA_SETREMOTEGROUPNAME
*srgn
)
165 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
166 FIXME( "(%p)->(%p):stub\n", This
, srgn
);
170 static HRESULT WINAPI
IDPLobbySPImpl_SetPlayerName( IDPLobbySP
*iface
,
171 SPDATA_SETREMOTEPLAYERNAME
*srpn
)
173 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
174 FIXME( "(%p)->(%p):stub\n", This
, srpn
);
178 static HRESULT WINAPI
IDPLobbySPImpl_SetSessionDesc( IDPLobbySP
*iface
,
179 SPDATA_SETSESSIONDESC
*ssd
)
181 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
182 FIXME( "(%p)->(%p):stub\n", This
, ssd
);
186 static HRESULT WINAPI
IDPLobbySPImpl_SetSPDataPointer( IDPLobbySP
*iface
, void *lpData
)
188 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
189 FIXME( "(%p)->(%p):stub\n", This
, lpData
);
193 static HRESULT WINAPI
IDPLobbySPImpl_StartSession( IDPLobbySP
*iface
,
194 SPDATA_STARTSESSIONCOMMAND
*ssc
)
196 IDPLobbySPImpl
*This
= impl_from_IDPLobbySP( iface
);
197 FIXME( "(%p)->(%p):stub\n", This
, ssc
);
202 static const IDPLobbySPVtbl dpLobbySPVT
=
204 IDPLobbySPImpl_QueryInterface
,
205 IDPLobbySPImpl_AddRef
,
206 IDPLobbySPImpl_Release
,
207 IDPLobbySPImpl_AddGroupToGroup
,
208 IDPLobbySPImpl_AddPlayerToGroup
,
209 IDPLobbySPImpl_CreateGroup
,
210 IDPLobbySPImpl_CreateGroupInGroup
,
211 IDPLobbySPImpl_DeleteGroupFromGroup
,
212 IDPLobbySPImpl_DeletePlayerFromGroup
,
213 IDPLobbySPImpl_DestroyGroup
,
214 IDPLobbySPImpl_EnumSessionsResponse
,
215 IDPLobbySPImpl_GetSPDataPointer
,
216 IDPLobbySPImpl_HandleMessage
,
217 IDPLobbySPImpl_SendChatMessage
,
218 IDPLobbySPImpl_SetGroupName
,
219 IDPLobbySPImpl_SetPlayerName
,
220 IDPLobbySPImpl_SetSessionDesc
,
221 IDPLobbySPImpl_SetSPDataPointer
,
222 IDPLobbySPImpl_StartSession
225 HRESULT
dplobbysp_create( REFIID riid
, void **ppv
, IDirectPlayImpl
*dp
)
230 TRACE( "(%s, %p)\n", debugstr_guid( riid
), ppv
);
233 obj
= HeapAlloc( GetProcessHeap(), 0, sizeof( *obj
) );
235 return DPERR_OUTOFMEMORY
;
237 obj
->IDPLobbySP_iface
.lpVtbl
= &dpLobbySPVT
;
241 hr
= IDPLobbySP_QueryInterface( &obj
->IDPLobbySP_iface
, riid
, ppv
);
242 IDPLobbySP_Release( &obj
->IDPLobbySP_iface
);