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); }
// 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); }