public void MatchAMultiPlayerParty()
        {
            // Create a party with multiple players within it.
            var partyId =
                _partyClient.CreateParty(new CreatePartyRequest(), _leaderMetadata)
                .PartyId;
            var pitAnotherMember    = CreatePlayerIdentityTokenForPlayer(MemberPlayerId);
            var inviteAnotherPlayer = _inviteClient.CreateInvite(new CreateInviteRequest {
                ReceiverPlayerId = MemberPlayerId
            },
                                                                 _leaderMetadata).InviteId;

            Assert.NotNull(inviteAnotherPlayer);
            _partyClient.JoinParty(new JoinPartyRequest {
                PartyId = partyId
            },
                                   new Metadata {
                { PitRequestHeaderName, pitAnotherMember }
            });

            // Join matchmaking.
            _gatewayClient.Join(new JoinRequest
            {
                MatchmakingType = "match1"
            }, _leaderMetadata);

            AssertWithinSeconds(10, () =>
            {
                var leaderStatus = _gatewayClient.GetJoinStatus(new GetJoinStatusRequest {
                    PlayerId = LeaderPlayerId
                }, _leaderMetadata);
                if (!leaderStatus.Complete)
                {
                    return(false);
                }

                Assert.AreEqual("test_deployment_1", leaderStatus.DeploymentName);
                Assert.False(string.IsNullOrEmpty(leaderStatus.LoginToken));

                // Verify that the other member has been matched into the same deployment as the leader.
                var otherMemberStatus = _gatewayClient.GetJoinStatus(new GetJoinStatusRequest {
                    PlayerId = MemberPlayerId
                },
                                                                     new Metadata {
                    { PitRequestHeaderName, pitAnotherMember }
                });
                Assert.True(otherMemberStatus.Complete);
                Assert.AreEqual("test_deployment_1", otherMemberStatus.DeploymentName);
                Assert.False(string.IsNullOrEmpty(otherMemberStatus.LoginToken));

                return(true);
            });

            // Clean-up.
            _partyClient.DeleteParty(new DeletePartyRequest(), _leaderMetadata);
            _inviteClient.DeleteInvite(new DeleteInviteRequest {
                InviteId = inviteAnotherPlayer
            }, _leaderMetadata);
        }
Esempio n. 2
0
        public void MatchAMultiPlayerParty()
        {
            // Create a party with multiple players within it.
            var partyId =
                _partyClient.CreateParty(new CreatePartyRequest(), _leaderMetadata)
                .PartyId;
            var pitAnotherMember    = CreatePlayerIdentityTokenForPlayer(MemberPlayerId);
            var inviteAnotherPlayer = _inviteClient.CreateInvite(new CreateInviteRequest {
                ReceiverPlayerId = MemberPlayerId
            },
                                                                 _leaderMetadata).InviteId;

            Assert.NotNull(inviteAnotherPlayer);
            _partyClient.JoinParty(new JoinPartyRequest {
                PartyId = partyId
            },
                                   new Metadata {
                { PitRequestHeaderName, pitAnotherMember }
            });

            // Join matchmaking.
            _gatewayClient.Join(new JoinRequest
            {
                MatchmakingType = "match1"
            }, _leaderMetadata);

            AssertWithinSeconds(10, () =>
            {
                var leaderOp = _operationsClient.GetOperation(LeaderPlayerId,
                                                              CallSettings.FromHeader(PitRequestHeaderName, _leaderPit));
                if (!leaderOp.Done)
                {
                    return(false);
                }

                var assignment = leaderOp.Response.Unpack <JoinResponse>();
                Assert.AreEqual("test_deployment_1", assignment.DeploymentName);
                Assert.False(string.IsNullOrEmpty(assignment.LoginToken));

                // Verify that the other member has been matched into the same deployment as the leader.
                var otherMemberOp = _operationsClient.GetOperation(MemberPlayerId,
                                                                   CallSettings.FromHeader(PitRequestHeaderName, CreatePlayerIdentityTokenForPlayer(MemberPlayerId)));
                Assert.True(otherMemberOp.Done);
                var memberAssignment = otherMemberOp.Response.Unpack <JoinResponse>();
                Assert.AreEqual("test_deployment_1", memberAssignment.DeploymentName);
                Assert.False(string.IsNullOrEmpty(memberAssignment.LoginToken));

                return(true);
            });

            // Clean-up.
            _partyClient.DeleteParty(new DeletePartyRequest(), _leaderMetadata);
            _inviteClient.DeleteInvite(new DeleteInviteRequest {
                InviteId = inviteAnotherPlayer
            }, _leaderMetadata);
        }
Esempio n. 3
0
        public void AllowPlayersToSendInvites()
        {
            // Create a party.
            var senderPit = CreatePlayerIdentityTokenForPlayer(LeaderPlayerId);
            var partyId   = _partyClient
                            .CreateParty(new CreatePartyRequest(), new Metadata {
                { PitRequestHeaderName, senderPit }
            }).PartyId;

            // Send invites to other players.
            var createInviteRequest = new CreateInviteRequest {
                ReceiverPlayerId = PlayerId1
            };
            var inviteId1 = _inviteClient
                            .CreateInvite(createInviteRequest, new Metadata {
                { PitRequestHeaderName, senderPit }
            })
                            .InviteId;

            Assert.NotNull(inviteId1);

            createInviteRequest = new CreateInviteRequest {
                ReceiverPlayerId = PlayerId2
            };
            var inviteId2 = _inviteClient
                            .CreateInvite(createInviteRequest, new Metadata {
                { PitRequestHeaderName, senderPit }
            })
                            .InviteId;

            Assert.NotNull(inviteId2);

            // Verify that the invites were successfully stored.
            var invite1 = _inviteClient.GetInvite(new GetInviteRequest {
                InviteId = inviteId1
            },
                                                  new Metadata {
                { PitRequestHeaderName, senderPit }
            }).Invite;

            Assert.AreEqual(inviteId1, invite1.Id);
            Assert.AreEqual(LeaderPlayerId, invite1.SenderPlayerId);
            Assert.AreEqual(PlayerId1, invite1.ReceiverPlayerId);
            Assert.AreEqual(partyId, invite1.PartyId);
            Assert.AreEqual(Invite.Types.Status.Pending, invite1.CurrentStatus);

            var invite2 = _inviteClient.GetInvite(new GetInviteRequest {
                InviteId = inviteId2
            },
                                                  new Metadata {
                { PitRequestHeaderName, senderPit }
            }).Invite;

            Assert.AreEqual(inviteId2, invite2.Id);
            Assert.AreEqual(LeaderPlayerId, invite2.SenderPlayerId);
            Assert.AreEqual(PlayerId2, invite2.ReceiverPlayerId);
            Assert.AreEqual(partyId, invite2.PartyId);
            Assert.AreEqual(Invite.Types.Status.Pending, invite2.CurrentStatus);

            // Verify that the sender has the invites in its outbound invites.
            var senderPlayerInvites = _inviteClient.ListAllInvites(new ListAllInvitesRequest(),
                                                                   new Metadata {
                { PitRequestHeaderName, senderPit }
            });

            Assert.AreEqual(2, senderPlayerInvites.OutboundInvites.Count);
            Assert.AreEqual(invite1, senderPlayerInvites.OutboundInvites[0]);
            Assert.AreEqual(invite2, senderPlayerInvites.OutboundInvites[1]);

            // Verify that both receivers have the invite in their inbound invites.
            var receiverPit1           = CreatePlayerIdentityTokenForPlayer(PlayerId1);
            var receiverPlayerInvites1 = _inviteClient.ListAllInvites(new ListAllInvitesRequest(),
                                                                      new Metadata {
                { PitRequestHeaderName, receiverPit1 }
            });

            Assert.AreEqual(1, receiverPlayerInvites1.InboundInvites.Count);
            Assert.AreEqual(invite1, receiverPlayerInvites1.InboundInvites[0]);

            var receiverPit2           = CreatePlayerIdentityTokenForPlayer(PlayerId2);
            var receiverPlayerInvites2 = _inviteClient.ListAllInvites(new ListAllInvitesRequest(),
                                                                      new Metadata {
                { PitRequestHeaderName, receiverPit2 }
            });

            Assert.AreEqual(1, receiverPlayerInvites2.InboundInvites.Count);
            Assert.AreEqual(invite2, receiverPlayerInvites2.InboundInvites[0]);

            // Cleanup.
            _inviteClient.DeleteInvite(new DeleteInviteRequest {
                InviteId = inviteId1
            },
                                       new Metadata {
                { PitRequestHeaderName, senderPit }
            });
            _inviteClient.DeleteInvite(new DeleteInviteRequest {
                InviteId = inviteId2
            },
                                       new Metadata {
                { PitRequestHeaderName, senderPit }
            });
            _partyClient.DeleteParty(new DeletePartyRequest(), new Metadata {
                { PitRequestHeaderName, senderPit }
            });
        }