dpnet: Implement IDirectPlay8LobbiedApplication Initialize

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Mon May 12 19:04:00 CDT 2014


Hi,

Changelog:
       dpnet: Implement IDirectPlay8LobbiedApplication Initialize


Best Regards
   Alistair Leslie-Hughes
-------------- next part --------------
>From 309b4b5478c3bc8b8b6f74cf4a44a891c52fd85c Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Fri, 14 Feb 2014 14:53:40 +1100
Subject: [PATCH] Implement IDirectPlay8LobbiedApplication Initialize
To: wine-patches <wine-patches at winehq.org>

---
 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 20dd874..f2f8ef3 100644
--- a/dlls/dpnet/dpnet_private.h
+++ b/dlls/dpnet/dpnet_private.h
@@ -98,8 +98,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..8986ec5 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 = NULL;
 
     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..a59bade 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 = NULL;
 
     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();
 }
-- 
1.9.1



More information about the wine-patches mailing list