Module: wine Branch: master Commit: d9ae2b828e6783cc02273bf9018e2ebba93778df URL: http://source.winehq.org/git/wine.git/?a=commit;h=d9ae2b828e6783cc02273bf901...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Fri Feb 14 14:53:40 2014 +1100
dpnet: Implement IDirectPlay8LobbiedApplication Initialize.
---
dlls/dpnet/dpnet_private.h | 9 +++++++-- dlls/dpnet/lobbiedapp.c | 16 +++++++++++++--- dlls/dpnet/tests/client.c | 28 ++++++++++++++++++++++++++-- dlls/dpnet/tests/peer.c | 32 ++++++++++++++++++++++++++++++-- 4 files changed, 76 insertions(+), 9 deletions(-)
diff --git a/dlls/dpnet/dpnet_private.h b/dlls/dpnet/dpnet_private.h index af81474..8fd04d6 100644 --- a/dlls/dpnet/dpnet_private.h +++ b/dlls/dpnet/dpnet_private.h @@ -78,8 +78,13 @@ struct IDirectPlay8AddressImpl */ struct IDirectPlay8LobbiedApplicationImpl { - IDirectPlay8LobbiedApplication IDirectPlay8LobbiedApplication_iface; - LONG ref; + IDirectPlay8LobbiedApplication IDirectPlay8LobbiedApplication_iface; + LONG ref; + + PFNDPNMESSAGEHANDLER msghandler; + DWORD flags; + void *usercontext; + DPNHANDLE *connection; };
/***************************************************************************** diff --git a/dlls/dpnet/lobbiedapp.c b/dlls/dpnet/lobbiedapp.c index b430776..507a895 100644 --- a/dlls/dpnet/lobbiedapp.c +++ b/dlls/dpnet/lobbiedapp.c @@ -89,9 +89,19 @@ static HRESULT WINAPI IDirectPlay8LobbiedApplicationImpl_Initialize(IDirectPlay8 void * const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, DPNHANDLE * const pdpnhConnection, const DWORD dwFlags) { - IDirectPlay8LobbiedApplicationImpl *This = impl_from_IDirectPlay8LobbiedApplication(iface); - FIXME("(%p): stub\n", This); - return DPN_OK; + IDirectPlay8LobbiedApplicationImpl *This = impl_from_IDirectPlay8LobbiedApplication(iface); + + TRACE("(%p)->(%p %p %p %x)\n", This, pvUserContext, pfn, pdpnhConnection, dwFlags); + + if(!pfn) + return DPNERR_INVALIDPOINTER; + + This->msghandler = pfn; + This->flags = dwFlags; + This->usercontext = pvUserContext; + This->connection = pdpnhConnection; + + return DPN_OK; }
static HRESULT WINAPI IDirectPlay8LobbiedApplicationImpl_RegisterProgram(IDirectPlay8LobbiedApplication *iface, diff --git a/dlls/dpnet/tests/client.c b/dlls/dpnet/tests/client.c index bf0d26f..92bed55 100644 --- a/dlls/dpnet/tests/client.c +++ b/dlls/dpnet/tests/client.c @@ -21,10 +21,12 @@ #include <stdio.h>
#include <dplay8.h> +#include <dplobby8.h> #include "wine/test.h"
static IDirectPlay8Client* client = NULL; +static IDirectPlay8LobbiedApplication* lobbied = NULL; static const GUID appguid = { 0xcd0c3d4b, 0xe15e, 0x4cf2, { 0x9e, 0xa8, 0x6e, 0x1d, 0x65, 0x48, 0xc5, 0xa5 } };
static HRESULT WINAPI DirectPlayMessageHandler(PVOID context, DWORD message_id, PVOID buffer) @@ -33,10 +35,17 @@ static HRESULT WINAPI DirectPlayMessageHandler(PVOID context, DWORD message_id, return S_OK; }
+static HRESULT WINAPI DirectPlayLobbyMessageHandler(PVOID context, DWORD message_id, PVOID buffer) +{ + trace("DirectPlayLobbyMessageHandler: 0x%08x\n", message_id); + return S_OK; +} + static BOOL test_init_dp(void) { HRESULT hr; DPN_SP_CAPS caps; + DPNHANDLE lobbyConnection;
hr = CoInitialize(0); ok(hr == S_OK, "CoInitialize failed with %x\n", hr); @@ -56,6 +65,14 @@ static BOOL test_init_dp(void) hr = IDirectPlay8Client_Initialize(client, NULL, DirectPlayMessageHandler, 0); ok(hr == S_OK, "IDirectPlay8Client_Initialize failed with %x\n", hr);
+ hr = CoCreateInstance(&CLSID_DirectPlay8LobbiedApplication, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectPlay8LobbiedApplication, (void **)&lobbied); + ok(hr == S_OK, "CoCreateInstance failed with 0x%x\n", hr); + + hr = IDirectPlay8LobbiedApplication_Initialize(lobbied, NULL, DirectPlayLobbyMessageHandler, + &lobbyConnection, 0); + ok(hr == S_OK, "IDirectPlay8LobbiedApplication_Initialize failed with %x\n", hr); + return client != NULL; }
@@ -195,8 +212,15 @@ static void test_cleanup_dp(void) hr = IDirectPlay8Client_Close(client, 0); ok(hr == S_OK, "IDirectPlay8Client_Close failed with %x\n", hr);
- hr = IDirectPlay8Client_Release(client); - ok(hr == S_OK, "IDirectPlay8Client_Release failed with %x\n", hr); + if(lobbied) + { + hr = IDirectPlay8LobbiedApplication_Close(lobbied, 0); + ok(hr == S_OK, "IDirectPlay8LobbiedApplication_Close failed with %x\n", hr); + + IDirectPlay8LobbiedApplication_Release(lobbied); + } + + IDirectPlay8Client_Release(client);
CoUninitialize(); } diff --git a/dlls/dpnet/tests/peer.c b/dlls/dpnet/tests/peer.c index 670b843..1fec1f2 100644 --- a/dlls/dpnet/tests/peer.c +++ b/dlls/dpnet/tests/peer.c @@ -20,10 +20,12 @@ #include <stdio.h>
#include <dplay8.h> +#include <dplobby8.h> #include "wine/test.h"
static IDirectPlay8Peer* peer = NULL; +static IDirectPlay8LobbiedApplication* lobbied = NULL;
static HRESULT WINAPI DirectPlayMessageHandler(PVOID context, DWORD message_id, PVOID buffer) { @@ -31,10 +33,17 @@ static HRESULT WINAPI DirectPlayMessageHandler(PVOID context, DWORD message_id, return S_OK; }
+static HRESULT WINAPI DirectPlayLobbyMessageHandler(PVOID context, DWORD message_id, PVOID buffer) +{ + trace("DirectPlayLobbyMessageHandler: 0x%08x\n", message_id); + return S_OK; +} + static void test_init_dp(void) { HRESULT hr; DPN_SP_CAPS caps; + DPNHANDLE lobbyConnection;
hr = CoInitialize(0); ok(hr == S_OK, "CoInitialize failed with %x\n", hr); @@ -53,6 +62,18 @@ static void test_init_dp(void)
hr = IDirectPlay8Peer_Initialize(peer, NULL, DirectPlayMessageHandler, 0); ok(hr == S_OK, "IDirectPlay8Peer_Initialize failed with %x\n", hr); + + hr = CoCreateInstance(&CLSID_DirectPlay8LobbiedApplication, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectPlay8LobbiedApplication, (void **)&lobbied); + ok(hr == S_OK, "CoCreateInstance failed with 0x%x\n", hr); + + hr = IDirectPlay8LobbiedApplication_Initialize(lobbied, NULL, NULL, + &lobbyConnection, 0); + ok(hr == DPNERR_INVALIDPOINTER, "Failed with %x\n", hr); + + hr = IDirectPlay8LobbiedApplication_Initialize(lobbied, NULL, DirectPlayLobbyMessageHandler, + &lobbyConnection, 0); + ok(hr == S_OK, "IDirectPlay8LobbiedApplication_Initialize failed with %x\n", hr); }
static void test_enum_service_providers(void) @@ -198,8 +219,15 @@ static void test_cleanup_dp(void) hr = IDirectPlay8Peer_Close(peer, 0); ok(hr == S_OK, "IDirectPlay8Peer_Close failed with %x\n", hr);
- hr = IDirectPlay8Peer_Release(peer); - ok(hr == S_OK, "IDirectPlay8Peer_Release failed with %x\n", hr); + if(lobbied) + { + hr = IDirectPlay8LobbiedApplication_Close(lobbied, 0); + ok(hr == S_OK, "IDirectPlay8LobbiedApplication_Close failed with %x\n", hr); + + IDirectPlay8LobbiedApplication_Release(lobbied); + } + + IDirectPlay8Peer_Release(peer);
CoUninitialize(); }