void MakeMatch(int numberOfPlayers)
    {
        var message = NMatchmakeAddMessage.Default(numberOfPlayers);

        // register for events from matchmaking
        client.OnMatchmakeMatched = OnMatchmakeMatched;

        // register for events belonging to users (join or leave)
        client.OnMatchPresence = OnMatchPresence;

        // send message to join the game
        client.Send(message, OnMakeMatch, OnError);
    }
Beispiel #2
0
    // This is invoked by clicking on the scene UI button.
    public void DoMatchmake()
    {
        // Add self to the matchmaker pool.
        var message = NMatchmakeAddMessage.Default(MatchPlayerSize);

        _client.Send(message, (INMatchmakeTicket ticket) => {
            // Store the matchmakeTicket so it can be used to cancel later.
            Debug.Log("Added to the pool by Matchmaker.");
            _matchmakeTicket = ticket;
        }, (INError error) => {
            Debug.LogErrorFormat("Send error: code '{1}' with '{0}'.", error.Message, error.Code);
        });
    }
        public void MatchmakeRemove()
        {
            ManualResetEvent   evt   = new ManualResetEvent(false);
            INError            error = null;
            INMatchmakeMatched res1  = null;
            INMatchmakeMatched res2  = null;

            client1.OnMatchmakeMatched = (INMatchmakeMatched matched) =>
            {
                res1 = matched;
                evt.Set();
            };
            client2.OnMatchmakeMatched = (INMatchmakeMatched matched) =>
            {
                res2 = matched;
                evt.Set();
            };

            client1.Send(NMatchmakeAddMessage.Default(2), (INMatchmakeTicket ticket1) =>
            {
                client1.Send(NMatchmakeRemoveMessage.Default(ticket1), (bool done) =>
                {
                    client2.Send(NMatchmakeAddMessage.Default(2), (INMatchmakeTicket ticket2) =>
                    {
                        // No action.
                    }, (INError err) =>
                    {
                        error = err;
                    });
                }, (INError err) =>
                {
                    error = err;
                });
            }, (INError err) =>
            {
                error = err;
            });

            evt.WaitOne(2000, false);
            Assert.IsNull(error);
            Assert.IsNull(res1);
            Assert.IsNull(res2);
        }
        public void MatchmakeAdd()
        {
            ManualResetEvent   evt   = new ManualResetEvent(false);
            INError            error = null;
            INMatchmakeMatched res   = null;

            client1.OnMatchmakeMatched = (INMatchmakeMatched matched) =>
            {
                res = matched;
                evt.Set();
            };

            client1.Send(NMatchmakeAddMessage.Default(2), (INMatchmakeTicket ticket1) =>
            {
            }, (INError err) =>
            {
                error = err;
            });

            evt.WaitOne(2000, false);
            Assert.IsNull(error);
            Assert.IsNull(res);
        }
    public void StartMatchMaking(Action onMatchMakeSucceeded, Action onMatchMakeFailed)
    {
        INMatchmakeTicket      matchmake         = null;
        IList <INUserPresence> matchParticipants = null;

        // Look for a match for two participants. Yourself and one more.
        var message = NMatchmakeAddMessage.Default(numMatchParticipants);

        _client.Send(message, (INMatchmakeTicket result) => {
            Debug.Log("Added user to matchmaker pool.");

            var cancelTicket = result.Ticket;
            Debug.LogFormat("The cancellation code {0}", cancelTicket);
        }, (INError err) => {
            Debug.LogErrorFormat("Error: code '{0}' with '{1}'.", err.Code, err.Message);
        });

        _client.OnMatchmakeMatched = (INMatchmakeMatched matched) => {
            // a match token is used to join the match.
            Debug.LogFormat("Match token: '{0}'", matched.Token);

            matchParticipants = matched.Presence;
            // a list of users who've been matched as opponents.
            foreach (var presence in matched.Presence)
            {
                Debug.LogFormat("User id: '{0}'.", presence.UserId);
                Debug.LogFormat("User handle: '{0}'.", presence.Handle);
            }

            // list of all match properties
            foreach (var userProperty in matched.UserProperties)
            {
                foreach (KeyValuePair <string, object> entry in userProperty.Properties)
                {
                    Debug.LogFormat("Property '{0}' for user '{1}' has value '{2}'.", entry.Key, userProperty.Id, entry.Value);
                }

                foreach (KeyValuePair <string, INMatchmakeFilter> entry in userProperty.Filters)
                {
                    Debug.LogFormat("Filter '{0}' for user '{1}' has value '{2}'.", entry.Key, userProperty.Id, entry.Value.ToString());
                }
            }

            var jm = NMatchJoinMessage.Default(matched.Token);
            _client.Send(jm, (INResultSet <INMatch> matches) => {
                Debug.Log("Successfully joined match.");
                _match             = matches.Results[0];
                _matchParticipants = matchParticipants;
//				foreach(Action a in OnMatchJoinedActions) {
//					a();
//				}

                foreach (INMatch match in matches.Results)
                {
                    Debug.LogFormat("Match id: {0} Presence", match.Id);

                    foreach (INUserPresence presence in match.Presence)
                    {
                        Debug.LogFormat("User handle: {0} id {1}.", presence.Handle, presence.UserId);
                    }
                }

                Enqueue(() => {
                    onMatchJoined(_match);
                });
            }, (INError error) => {
                Debug.LogErrorFormat("Error: code '{0}' with '{1}'.", error.Code, error.Message);
            });

            // TODO callback to UI
            onMatchMakeSucceeded();
        };
    }
        public void MatchmakingJoin()
        {
            ManualResetEvent   evt1   = new ManualResetEvent(false);
            ManualResetEvent   evt2   = new ManualResetEvent(false);
            INError            error  = null;
            INError            error1 = null;
            INError            error2 = null;
            INMatchmakeMatched res1   = null;
            INMatchmakeMatched res2   = null;

            client1.OnMatchmakeMatched = (INMatchmakeMatched matched) =>
            {
                res1 = matched;
                evt1.Set();
            };
            client2.OnMatchmakeMatched = (INMatchmakeMatched matched) =>
            {
                res2 = matched;
                evt2.Set();
            };

            client1.Send(NMatchmakeAddMessage.Default(2), (INMatchmakeTicket ticket1) =>
            {
                client2.Send(NMatchmakeAddMessage.Default(2), (INMatchmakeTicket ticket2) =>
                {
                    // No action.
                }, (INError err) =>
                {
                    error = err;
                });
            }, (INError err) =>
            {
                error = err;
            });

            evt1.WaitOne(5000, false);
            evt2.WaitOne(5000, false);
            Assert.IsNull(error);
            Assert.IsNull(error1);
            Assert.IsNull(error2);
            Assert.AreEqual(res1.Token.Token, res2.Token.Token);

            ManualResetEvent evt1m   = new ManualResetEvent(false);
            ManualResetEvent evt2m   = new ManualResetEvent(false);
            INMatch          m1      = null;
            INMatch          m2      = null;
            INError          error1m = null;
            INError          error2m = null;

            client1.Send(NMatchJoinMessage.Default(res1.Token), (INResultSet <INMatch> matches) =>
            {
                m1 = matches.Results[0];
                evt1m.Set();
            }, (INError err) =>
            {
                error1m = err;
                evt1m.Set();
            });
            client2.Send(NMatchJoinMessage.Default(res2.Token), (INResultSet <INMatch> matches) =>
            {
                m2 = matches.Results[0];
                evt2m.Set();
            }, (INError err) =>
            {
                error2m = err;
                evt2m.Set();
            });
            evt1m.WaitOne(5000, false);
            Assert.IsNull(error1m);
            Assert.IsNull(error2m);
            Assert.IsNotNull(m1);
            Assert.IsNotNull(m2);
            Assert.AreEqual(m1.Id, m2.Id);
        }