https://bugzilla.novell.com/show_bug.cgi?id=656176
https://bugzilla.novell.com/show_bug.cgi?id=656176#c0 Summary: GKMatchmakerViewController is not firing events to Delegate GKMatchmakerViewControllerDelegate Classification: Mono Product: MonoTouch Version: SVN Platform: All OS/Version: Other Status: NEW Severity: Major Priority: P5 - None Component: Class Libraries AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4 Using the GKMatchmakerViewController with iOS 4.2 in MonoTouch the events WasCancelled, DidFailWithError, DidFindMatch and DidFindPlayers are not firing on code attached either by attaching to the events on the GKMatchmakerViewController or by creating a subclass off of GKMatchmakerViewControllerDelegate and attaching to the Delegate property of the GKMatchmakerViewController object. Example: //Create match request matchRequest=new GKMatchRequest(); matchRequest.MinPlayers=state.playerCount; matchRequest.MaxPlayers=state.playerCount; //Display matchmaking controller Console.WriteLine("Starting Matchmaking"); matchmaker =new GKMatchmakerViewController(matchRequest); matchmaker.Delegate=new MatchmakerDelegate(matchmaker,state); mainView.PresentModalViewController(matchmaker,true); If I call the above code, the Matchmaking view is displayed correctly and works as would be expected, however if I try press the Cancel button, the WasCancelled event is never raised on the object or it's delegate. Reproducible: Always Steps to Reproduce: I've tried two methods and both have the same results, no event code is raised. Add this code to a simple iPad application, Authenticate a Game Center player and try to call either version of the GKMatchmakerViewController to initialize network play. --------------- Code to get Game Center Player for both versions --------------- GKLocalPlayer.LocalPlayer.Authenticate(delegate(MonoTouch.Foundation.NSError error){ //Did an error occur connection to the local player's account? if (error==null) { //We have successfully connected to game center _state.gameCenterAvailable=true; } else { //Not available _state.gameCenterAvailable=false; using(var alert = new UIAlertView("Hexo", "Game Center Unavailable", null, "OK", null)) { alert.Show(); } } }); --------------- Version 1 --------------- /Create match request matchRequest=new GKMatchRequest(); matchRequest.MinPlayers=state.playerCount; matchRequest.MaxPlayers=state.playerCount; //Display matchmaking controller Console.WriteLine("Starting Matchmaking"); matchmaker =new GKMatchmakerViewController(matchRequest); matchmaker.WasCancelled+=delegate(object sender, EventArgs e){ Console.WriteLine("Matchmaking cancelled"); state.match=null; matchmaker.DismissModalViewControllerAnimated(true); }; matchmaker.DidFailWithError+=delegate(object sender, GKErrorEventArgs e){ state.match=null; matchmaker.DismissModalViewControllerAnimated(true); Console.WriteLine("Matchmaking failed with errors"); }; matchmaker.DidFindMatch+=delegate(object sender, GKMatchEventArgs matchArgs){ state.match=matchArgs.Match; matchmaker.DismissModalViewControllerAnimated(true); Console.WriteLine("Matchmaking found match"); }; mainView.PresentModalViewController(matchmaker,true); ---------------- Version 2 ---------------- //Create match request matchRequest=new GKMatchRequest(); matchRequest.MinPlayers=state.playerCount; matchRequest.MaxPlayers=state.playerCount; //Display matchmaking controller Console.WriteLine("Starting Matchmaking"); matchmaker =new GKMatchmakerViewController(matchRequest); matchmaker.Delegate=new MatchmakerDelegate(matchmaker,state); mainView.PresentModalViewController(matchmaker,true); using System; using System.Drawing; using System.Collections.Generic; using System.Collections; using MonoTouch.Foundation; using MonoTouch.UIKit; using MonoTouch.CoreGraphics; using MonoTouch.ObjCRuntime; using MonoTouch.GameKit; namespace Hexo { public class MatchmakerDelegate : GKMatchmakerViewControllerDelegate { //Private variable storage private GKMatchmakerViewController _controller; private GameState _state; //Constructors public MatchmakerDelegate() : base() { } public MatchmakerDelegate(NSCoder coder): base(coder){ } public MatchmakerDelegate(NSObjectFlag flag): base(flag){ } public MatchmakerDelegate(IntPtr pointer): base(pointer){ } public MatchmakerDelegate(GKMatchmakerViewController controller,GameState state) : base() { this._controller=controller; this._state=state; } public override void WasCancelled (GKMatchmakerViewController viewController) { Console.WriteLine("Matchmaking cancelled"); _state.match=null; _controller.DismissModalViewControllerAnimated(true); } public override void DidFailWithError (GKMatchmakerViewController viewController, NSError error) { Console.WriteLine("Matchmaking failed with errors"); _state.match=null; _controller.DismissModalViewControllerAnimated(true); } public override void DidFindMatch (GKMatchmakerViewController viewController, GKMatch match) { Console.WriteLine("Matchmaking found match"); _state.match=match; _controller.DismissModalViewControllerAnimated(true); } public override void DidFindPlayers (GKMatchmakerViewController viewController, string[] playerIDs) { Console.WriteLine("Matchmaking found players"); } } } Actual Results: Events happening on the GKMatchmakerViewController never call the code attached to WasCancelled, DidFailWithError, DidFindMatch, or DidFindPlayers delegates. Expected Results: Events happening on the GKMatchmakerViewController should raise the events WasCancelled, DidFailWithError, DidFindMatch, or DidFindPlayers. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
