mirror of
https://github.com/solemnwarning/directplay-lite
synced 2024-12-30 16:45:37 +01:00
IDirectPlay8Peer: Implement SendTo() on groups.
This commit is contained in:
parent
9c1345f44a
commit
7c75bf7f9b
@ -648,21 +648,39 @@ HRESULT DirectPlay8Peer::SendTo(CONST DPNID dpnid, CONST DPN_BUFFER_DESC* CONST
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
/* TODO: Handle sending to a group. */
|
Peer *target_peer;
|
||||||
|
Group *target_group;
|
||||||
|
|
||||||
if(dpnid == local_player_id)
|
if(dpnid == local_player_id)
|
||||||
{
|
{
|
||||||
send_to_self = true;
|
send_to_self = true;
|
||||||
}
|
}
|
||||||
else{
|
else if((target_peer = get_peer_by_player_id(dpnid)) != NULL)
|
||||||
Peer *target_peer = get_peer_by_player_id(dpnid);
|
{
|
||||||
if(target_peer == NULL)
|
|
||||||
{
|
|
||||||
return DPNERR_INVALIDPLAYER;
|
|
||||||
}
|
|
||||||
|
|
||||||
send_to_peers.push_back(target_peer);
|
send_to_peers.push_back(target_peer);
|
||||||
}
|
}
|
||||||
|
else if((target_group = get_group_by_id(dpnid)) != NULL)
|
||||||
|
{
|
||||||
|
for(auto m = target_group->player_ids.begin(); m != target_group->player_ids.end(); ++m)
|
||||||
|
{
|
||||||
|
if(*m == local_player_id)
|
||||||
|
{
|
||||||
|
if(!(dwFlags & DPNSEND_NOLOOPBACK))
|
||||||
|
{
|
||||||
|
send_to_self = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
target_peer = get_peer_by_player_id(*m);
|
||||||
|
assert(target_peer != NULL);
|
||||||
|
|
||||||
|
send_to_peers.push_back(target_peer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return DPNERR_INVALIDPLAYER;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dwFlags & DPNSEND_SYNC)
|
if(dwFlags & DPNSEND_SYNC)
|
||||||
|
@ -12754,3 +12754,978 @@ TEST(DirectPlay8Peer, RemoveOtherPlayerFromGroupByMemberCloseHard)
|
|||||||
|
|
||||||
peer2.expect_end();
|
peer2.expect_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(DirectPlay8Peer, SendToGroupSelf)
|
||||||
|
{
|
||||||
|
DPN_APPLICATION_DESC app_desc;
|
||||||
|
memset(&app_desc, 0, sizeof(app_desc));
|
||||||
|
|
||||||
|
app_desc.dwSize = sizeof(app_desc);
|
||||||
|
app_desc.guidApplication = APP_GUID_1;
|
||||||
|
app_desc.pwszSessionName = L"Session 1";
|
||||||
|
|
||||||
|
IDP8AddressInstance host_addr(CLSID_DP8SP_TCPIP, PORT);
|
||||||
|
|
||||||
|
TestPeer host("host");
|
||||||
|
ASSERT_EQ(host->Host(&app_desc, &(host_addr.instance), 1, NULL, NULL, 0, 0), S_OK);
|
||||||
|
|
||||||
|
IDP8AddressInstance connect_addr(CLSID_DP8SP_TCPIP, L"127.0.0.1", PORT);
|
||||||
|
|
||||||
|
TestPeer peer1("peer1");
|
||||||
|
ASSERT_EQ(peer1->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
TestPeer peer2("peer2");
|
||||||
|
ASSERT_EQ(peer2->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
Sleep(100);
|
||||||
|
|
||||||
|
DPNID h_cg_dpnidGroup;
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
host.expect_push([&host, &h_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
h_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p1_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
peer1.expect_push([&host, &p1_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p1_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p2_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([&host, &p2_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p2_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPN_GROUP_INFO group_info;
|
||||||
|
memset(&group_info, 0, sizeof(group_info));
|
||||||
|
|
||||||
|
group_info.dwSize = sizeof(group_info);
|
||||||
|
group_info.dwInfoFlags = DPNINFO_NAME | DPNINFO_DATA;
|
||||||
|
group_info.pwszName = L"Test Group";
|
||||||
|
group_info.pvData = NULL;
|
||||||
|
group_info.dwDataSize = 0;
|
||||||
|
group_info.dwGroupFlags = 0;
|
||||||
|
|
||||||
|
ASSERT_EQ(host->CreateGroup(
|
||||||
|
&group_info, /* pdpnGroupInfo */
|
||||||
|
(void*)(0x9876), /* pvGroupContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCREATEGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
|
||||||
|
ASSERT_EQ(host->AddPlayerToGroup(
|
||||||
|
h_cg_dpnidGroup, /* idGroup */
|
||||||
|
peer1.first_cc_dpnidLocal, /* idClient */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNADDPLAYERTOGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
peer1.expect_push([](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_RECEIVE);
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
|
||||||
|
/* Don't care what we send, so long as it goes to the right peers. */
|
||||||
|
int blah;
|
||||||
|
DPN_BUFFER_DESC bd = { sizeof(blah), (BYTE*)(&blah) };
|
||||||
|
|
||||||
|
ASSERT_EQ(peer1->SendTo(
|
||||||
|
p1_cg_dpnidGroup, /* dpnid */
|
||||||
|
&bd, /* pBufferDesc */
|
||||||
|
1, /* cBufferDesc */
|
||||||
|
0, /* dwTimeOut */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNSEND_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test disabled because DirectX SendTo() appears to return a nonsense HRESULT
|
||||||
|
* in this case.
|
||||||
|
*/
|
||||||
|
#if 0
|
||||||
|
TEST(DirectPlay8Peer, SendToGroupSelfNoLoopback)
|
||||||
|
{
|
||||||
|
DPN_APPLICATION_DESC app_desc;
|
||||||
|
memset(&app_desc, 0, sizeof(app_desc));
|
||||||
|
|
||||||
|
app_desc.dwSize = sizeof(app_desc);
|
||||||
|
app_desc.guidApplication = APP_GUID_1;
|
||||||
|
app_desc.pwszSessionName = L"Session 1";
|
||||||
|
|
||||||
|
IDP8AddressInstance host_addr(CLSID_DP8SP_TCPIP, PORT);
|
||||||
|
|
||||||
|
TestPeer host("host");
|
||||||
|
ASSERT_EQ(host->Host(&app_desc, &(host_addr.instance), 1, NULL, NULL, 0, 0), S_OK);
|
||||||
|
|
||||||
|
IDP8AddressInstance connect_addr(CLSID_DP8SP_TCPIP, L"127.0.0.1", PORT);
|
||||||
|
|
||||||
|
TestPeer peer1("peer1");
|
||||||
|
ASSERT_EQ(peer1->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
TestPeer peer2("peer2");
|
||||||
|
ASSERT_EQ(peer2->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
Sleep(100);
|
||||||
|
|
||||||
|
DPNID h_cg_dpnidGroup;
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
host.expect_push([&host, &h_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
h_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p1_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
peer1.expect_push([&host, &p1_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p1_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p2_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([&host, &p2_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p2_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPN_GROUP_INFO group_info;
|
||||||
|
memset(&group_info, 0, sizeof(group_info));
|
||||||
|
|
||||||
|
group_info.dwSize = sizeof(group_info);
|
||||||
|
group_info.dwInfoFlags = DPNINFO_NAME | DPNINFO_DATA;
|
||||||
|
group_info.pwszName = L"Test Group";
|
||||||
|
group_info.pvData = NULL;
|
||||||
|
group_info.dwDataSize = 0;
|
||||||
|
group_info.dwGroupFlags = 0;
|
||||||
|
|
||||||
|
ASSERT_EQ(host->CreateGroup(
|
||||||
|
&group_info, /* pdpnGroupInfo */
|
||||||
|
(void*)(0x9876), /* pvGroupContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCREATEGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
|
||||||
|
ASSERT_EQ(host->AddPlayerToGroup(
|
||||||
|
h_cg_dpnidGroup, /* idGroup */
|
||||||
|
peer1.first_cc_dpnidLocal, /* idClient */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNADDPLAYERTOGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
|
||||||
|
/* Don't care what we send, so long as it goes to the right peers. */
|
||||||
|
int blah;
|
||||||
|
DPN_BUFFER_DESC bd = { sizeof(blah), (BYTE*)(&blah) };
|
||||||
|
|
||||||
|
ASSERT_EQ(peer1->SendTo(
|
||||||
|
p1_cg_dpnidGroup, /* dpnid */
|
||||||
|
&bd, /* pBufferDesc */
|
||||||
|
1, /* cBufferDesc */
|
||||||
|
0, /* dwTimeOut */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNSEND_SYNC | DPNSEND_NOLOOPBACK), /* dwFlags */
|
||||||
|
DPNERR_GENERIC);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TEST(DirectPlay8Peer, SendToGroupPeer)
|
||||||
|
{
|
||||||
|
DPN_APPLICATION_DESC app_desc;
|
||||||
|
memset(&app_desc, 0, sizeof(app_desc));
|
||||||
|
|
||||||
|
app_desc.dwSize = sizeof(app_desc);
|
||||||
|
app_desc.guidApplication = APP_GUID_1;
|
||||||
|
app_desc.pwszSessionName = L"Session 1";
|
||||||
|
|
||||||
|
IDP8AddressInstance host_addr(CLSID_DP8SP_TCPIP, PORT);
|
||||||
|
|
||||||
|
TestPeer host("host");
|
||||||
|
ASSERT_EQ(host->Host(&app_desc, &(host_addr.instance), 1, NULL, NULL, 0, 0), S_OK);
|
||||||
|
|
||||||
|
IDP8AddressInstance connect_addr(CLSID_DP8SP_TCPIP, L"127.0.0.1", PORT);
|
||||||
|
|
||||||
|
TestPeer peer1("peer1");
|
||||||
|
ASSERT_EQ(peer1->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
TestPeer peer2("peer2");
|
||||||
|
ASSERT_EQ(peer2->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
Sleep(100);
|
||||||
|
|
||||||
|
DPNID h_cg_dpnidGroup;
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
host.expect_push([&host, &h_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
h_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p1_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
peer1.expect_push([&host, &p1_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p1_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p2_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([&host, &p2_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p2_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPN_GROUP_INFO group_info;
|
||||||
|
memset(&group_info, 0, sizeof(group_info));
|
||||||
|
|
||||||
|
group_info.dwSize = sizeof(group_info);
|
||||||
|
group_info.dwInfoFlags = DPNINFO_NAME | DPNINFO_DATA;
|
||||||
|
group_info.pwszName = L"Test Group";
|
||||||
|
group_info.pvData = NULL;
|
||||||
|
group_info.dwDataSize = 0;
|
||||||
|
group_info.dwGroupFlags = 0;
|
||||||
|
|
||||||
|
ASSERT_EQ(host->CreateGroup(
|
||||||
|
&group_info, /* pdpnGroupInfo */
|
||||||
|
(void*)(0x9876), /* pvGroupContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCREATEGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
|
||||||
|
ASSERT_EQ(host->AddPlayerToGroup(
|
||||||
|
h_cg_dpnidGroup, /* idGroup */
|
||||||
|
peer2.first_cc_dpnidLocal, /* idClient */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNADDPLAYERTOGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_RECEIVE);
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Don't care what we send, so long as it goes to the right peers. */
|
||||||
|
int blah;
|
||||||
|
DPN_BUFFER_DESC bd = { sizeof(blah), (BYTE*)(&blah) };
|
||||||
|
|
||||||
|
ASSERT_EQ(peer1->SendTo(
|
||||||
|
p1_cg_dpnidGroup, /* dpnid */
|
||||||
|
&bd, /* pBufferDesc */
|
||||||
|
1, /* cBufferDesc */
|
||||||
|
0, /* dwTimeOut */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNSEND_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(DirectPlay8Peer, SendToGroupPeerNoLoopback)
|
||||||
|
{
|
||||||
|
DPN_APPLICATION_DESC app_desc;
|
||||||
|
memset(&app_desc, 0, sizeof(app_desc));
|
||||||
|
|
||||||
|
app_desc.dwSize = sizeof(app_desc);
|
||||||
|
app_desc.guidApplication = APP_GUID_1;
|
||||||
|
app_desc.pwszSessionName = L"Session 1";
|
||||||
|
|
||||||
|
IDP8AddressInstance host_addr(CLSID_DP8SP_TCPIP, PORT);
|
||||||
|
|
||||||
|
TestPeer host("host");
|
||||||
|
ASSERT_EQ(host->Host(&app_desc, &(host_addr.instance), 1, NULL, NULL, 0, 0), S_OK);
|
||||||
|
|
||||||
|
IDP8AddressInstance connect_addr(CLSID_DP8SP_TCPIP, L"127.0.0.1", PORT);
|
||||||
|
|
||||||
|
TestPeer peer1("peer1");
|
||||||
|
ASSERT_EQ(peer1->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
TestPeer peer2("peer2");
|
||||||
|
ASSERT_EQ(peer2->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
Sleep(100);
|
||||||
|
|
||||||
|
DPNID h_cg_dpnidGroup;
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
host.expect_push([&host, &h_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
h_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p1_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
peer1.expect_push([&host, &p1_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p1_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p2_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([&host, &p2_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p2_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPN_GROUP_INFO group_info;
|
||||||
|
memset(&group_info, 0, sizeof(group_info));
|
||||||
|
|
||||||
|
group_info.dwSize = sizeof(group_info);
|
||||||
|
group_info.dwInfoFlags = DPNINFO_NAME | DPNINFO_DATA;
|
||||||
|
group_info.pwszName = L"Test Group";
|
||||||
|
group_info.pvData = NULL;
|
||||||
|
group_info.dwDataSize = 0;
|
||||||
|
group_info.dwGroupFlags = 0;
|
||||||
|
|
||||||
|
ASSERT_EQ(host->CreateGroup(
|
||||||
|
&group_info, /* pdpnGroupInfo */
|
||||||
|
(void*)(0x9876), /* pvGroupContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCREATEGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
|
||||||
|
ASSERT_EQ(host->AddPlayerToGroup(
|
||||||
|
h_cg_dpnidGroup, /* idGroup */
|
||||||
|
peer2.first_cc_dpnidLocal, /* idClient */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNADDPLAYERTOGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_RECEIVE);
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Don't care what we send, so long as it goes to the right peers. */
|
||||||
|
int blah;
|
||||||
|
DPN_BUFFER_DESC bd = { sizeof(blah), (BYTE*)(&blah) };
|
||||||
|
|
||||||
|
ASSERT_EQ(peer1->SendTo(
|
||||||
|
p1_cg_dpnidGroup, /* dpnid */
|
||||||
|
&bd, /* pBufferDesc */
|
||||||
|
1, /* cBufferDesc */
|
||||||
|
0, /* dwTimeOut */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNSEND_SYNC | DPNSEND_NOLOOPBACK), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(DirectPlay8Peer, SendToGroupPeerAndSelf)
|
||||||
|
{
|
||||||
|
DPN_APPLICATION_DESC app_desc;
|
||||||
|
memset(&app_desc, 0, sizeof(app_desc));
|
||||||
|
|
||||||
|
app_desc.dwSize = sizeof(app_desc);
|
||||||
|
app_desc.guidApplication = APP_GUID_1;
|
||||||
|
app_desc.pwszSessionName = L"Session 1";
|
||||||
|
|
||||||
|
IDP8AddressInstance host_addr(CLSID_DP8SP_TCPIP, PORT);
|
||||||
|
|
||||||
|
TestPeer host("host");
|
||||||
|
ASSERT_EQ(host->Host(&app_desc, &(host_addr.instance), 1, NULL, NULL, 0, 0), S_OK);
|
||||||
|
|
||||||
|
IDP8AddressInstance connect_addr(CLSID_DP8SP_TCPIP, L"127.0.0.1", PORT);
|
||||||
|
|
||||||
|
TestPeer peer1("peer1");
|
||||||
|
ASSERT_EQ(peer1->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
TestPeer peer2("peer2");
|
||||||
|
ASSERT_EQ(peer2->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
Sleep(100);
|
||||||
|
|
||||||
|
DPNID h_cg_dpnidGroup;
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
host.expect_push([&host, &h_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
h_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p1_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
peer1.expect_push([&host, &p1_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p1_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p2_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([&host, &p2_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p2_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPN_GROUP_INFO group_info;
|
||||||
|
memset(&group_info, 0, sizeof(group_info));
|
||||||
|
|
||||||
|
group_info.dwSize = sizeof(group_info);
|
||||||
|
group_info.dwInfoFlags = DPNINFO_NAME | DPNINFO_DATA;
|
||||||
|
group_info.pwszName = L"Test Group";
|
||||||
|
group_info.pvData = NULL;
|
||||||
|
group_info.dwDataSize = 0;
|
||||||
|
group_info.dwGroupFlags = 0;
|
||||||
|
|
||||||
|
ASSERT_EQ(host->CreateGroup(
|
||||||
|
&group_info, /* pdpnGroupInfo */
|
||||||
|
(void*)(0x9876), /* pvGroupContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCREATEGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
|
||||||
|
ASSERT_EQ(host->AddPlayerToGroup(
|
||||||
|
h_cg_dpnidGroup, /* idGroup */
|
||||||
|
peer1.first_cc_dpnidLocal, /* idClient */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNADDPLAYERTOGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
ASSERT_EQ(host->AddPlayerToGroup(
|
||||||
|
h_cg_dpnidGroup, /* idGroup */
|
||||||
|
peer2.first_cc_dpnidLocal, /* idClient */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNADDPLAYERTOGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
peer1.expect_push([](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_RECEIVE);
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_RECEIVE);
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Don't care what we send, so long as it goes to the right peers. */
|
||||||
|
int blah;
|
||||||
|
DPN_BUFFER_DESC bd = { sizeof(blah), (BYTE*)(&blah) };
|
||||||
|
|
||||||
|
ASSERT_EQ(peer1->SendTo(
|
||||||
|
p1_cg_dpnidGroup, /* dpnid */
|
||||||
|
&bd, /* pBufferDesc */
|
||||||
|
1, /* cBufferDesc */
|
||||||
|
0, /* dwTimeOut */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNSEND_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(DirectPlay8Peer, SendToGroupPeerAndSelfNoLoopback)
|
||||||
|
{
|
||||||
|
DPN_APPLICATION_DESC app_desc;
|
||||||
|
memset(&app_desc, 0, sizeof(app_desc));
|
||||||
|
|
||||||
|
app_desc.dwSize = sizeof(app_desc);
|
||||||
|
app_desc.guidApplication = APP_GUID_1;
|
||||||
|
app_desc.pwszSessionName = L"Session 1";
|
||||||
|
|
||||||
|
IDP8AddressInstance host_addr(CLSID_DP8SP_TCPIP, PORT);
|
||||||
|
|
||||||
|
TestPeer host("host");
|
||||||
|
ASSERT_EQ(host->Host(&app_desc, &(host_addr.instance), 1, NULL, NULL, 0, 0), S_OK);
|
||||||
|
|
||||||
|
IDP8AddressInstance connect_addr(CLSID_DP8SP_TCPIP, L"127.0.0.1", PORT);
|
||||||
|
|
||||||
|
TestPeer peer1("peer1");
|
||||||
|
ASSERT_EQ(peer1->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
TestPeer peer2("peer2");
|
||||||
|
ASSERT_EQ(peer2->Connect(
|
||||||
|
&app_desc, /* pdnAppDesc */
|
||||||
|
connect_addr, /* pHostAddr */
|
||||||
|
NULL, /* pDeviceInfo */
|
||||||
|
NULL, /* pdnSecurity */
|
||||||
|
NULL, /* pdnCredentials */
|
||||||
|
NULL, /* pvUserConnectData */
|
||||||
|
0, /* dwUserConnectDataSize */
|
||||||
|
0, /* pvPlayerContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCONNECT_SYNC /* dwFlags */
|
||||||
|
), S_OK);
|
||||||
|
|
||||||
|
Sleep(100);
|
||||||
|
|
||||||
|
DPNID h_cg_dpnidGroup;
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
host.expect_push([&host, &h_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
h_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p1_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
peer1.expect_push([&host, &p1_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p1_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPNID p2_cg_dpnidGroup;
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([&host, &p2_cg_dpnidGroup](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_CREATE_GROUP);
|
||||||
|
if(dwMessageType == DPN_MSGID_CREATE_GROUP)
|
||||||
|
{
|
||||||
|
DPNMSG_CREATE_GROUP *cg = (DPNMSG_CREATE_GROUP*)(pMessage);
|
||||||
|
p2_cg_dpnidGroup = cg->dpnidGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
DPN_GROUP_INFO group_info;
|
||||||
|
memset(&group_info, 0, sizeof(group_info));
|
||||||
|
|
||||||
|
group_info.dwSize = sizeof(group_info);
|
||||||
|
group_info.dwInfoFlags = DPNINFO_NAME | DPNINFO_DATA;
|
||||||
|
group_info.pwszName = L"Test Group";
|
||||||
|
group_info.pvData = NULL;
|
||||||
|
group_info.dwDataSize = 0;
|
||||||
|
group_info.dwGroupFlags = 0;
|
||||||
|
|
||||||
|
ASSERT_EQ(host->CreateGroup(
|
||||||
|
&group_info, /* pdpnGroupInfo */
|
||||||
|
(void*)(0x9876), /* pvGroupContext */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNCREATEGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
|
||||||
|
ASSERT_EQ(host->AddPlayerToGroup(
|
||||||
|
h_cg_dpnidGroup, /* idGroup */
|
||||||
|
peer1.first_cc_dpnidLocal, /* idClient */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNADDPLAYERTOGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
ASSERT_EQ(host->AddPlayerToGroup(
|
||||||
|
h_cg_dpnidGroup, /* idGroup */
|
||||||
|
peer2.first_cc_dpnidLocal, /* idClient */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNADDPLAYERTOGROUP_SYNC), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
host.expect_begin();
|
||||||
|
|
||||||
|
peer1.expect_begin();
|
||||||
|
|
||||||
|
peer2.expect_begin();
|
||||||
|
peer2.expect_push([](DWORD dwMessageType, PVOID pMessage)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(dwMessageType, DPN_MSGID_RECEIVE);
|
||||||
|
return S_OK;
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Don't care what we send, so long as it goes to the right peers. */
|
||||||
|
int blah;
|
||||||
|
DPN_BUFFER_DESC bd = { sizeof(blah), (BYTE*)(&blah) };
|
||||||
|
|
||||||
|
ASSERT_EQ(peer1->SendTo(
|
||||||
|
p1_cg_dpnidGroup, /* dpnid */
|
||||||
|
&bd, /* pBufferDesc */
|
||||||
|
1, /* cBufferDesc */
|
||||||
|
0, /* dwTimeOut */
|
||||||
|
NULL, /* pvAsyncContext */
|
||||||
|
NULL, /* phAsyncHandle */
|
||||||
|
DPNSEND_SYNC | DPNSEND_NOLOOPBACK), /* dwFlags */
|
||||||
|
S_OK);
|
||||||
|
|
||||||
|
Sleep(250);
|
||||||
|
|
||||||
|
peer2.expect_end();
|
||||||
|
peer1.expect_end();
|
||||||
|
host.expect_end();
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user