// for illustration purposes and to keep things simple we will set the match whenever any event // that returns it fires private void currentMatchChanged(GKTurnBasedMatch match) { // probably not the most user friendly thing to do but we will just swap to whatever match just had an event _currentMatch = match; GameCenterTurnBasedBinding.changeCurrentMatch(match.matchId); Debug.Log("loaded match: " + match.matchId + ". The match data will be automatically fetched for us."); }
public void loadMatchesDidFinish(string json) { if (loadMatchesDidFinishEvent != null) { loadMatchesDidFinishEvent(GKTurnBasedMatch.fromJSON(json)); } }
/// <summary> /// Loads all the turn-based matches involving the local player and calls the callback on completion. /// </summary> /// <param name="callback">Callback.</param> public static void LoadAllMyMatches(Action <TurnBasedMatch[], NSError> callback) { GKTurnBasedMatch.LoadMatches(delegate(object[] gkmatches, NSError error) { if ((gkmatches == null) || (gkmatches.Length == 0)) { callback(null, error); callback = null; } else { var matches = new TurnBasedMatch[gkmatches.Length]; int totalLoaded = 0; for (int i = 0; i < gkmatches.Length; i++) { var gkmatch = gkmatches[i] as GKTurnBasedMatch; matches[i] = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), gkmatch) as TurnBasedMatch; gkmatch = null; matches[i].ReloadPlayers(delegate() { totalLoaded++; if (totalLoaded == matches.Length) { callback(matches, error); callback = null; matches = null; error = null; } }); } } gkmatches = null; }); }
private static void _EndAndRemoveMatch(GKTurnBasedMatch match) { try { (match.participants[0] as GKTurnBasedParticipant).matchOutcome = GKTurnBasedMatchOutcome.Won; for (var i = match.participants.Length - 1; i > 0; i--) { (match.participants[i] as GKTurnBasedParticipant).matchOutcome = GKTurnBasedMatchOutcome.Lost; } match.EndMatchInTurn((match.matchData != null) ? match.matchData : new NSData(), delegate(NSError error) { if (error != null) { Debug.Log("end match error: " + error.LocalizedDescription()); } match.Remove(delegate(NSError error2) { if (error2 != null) { Debug.Log("remove match error: " + error2.LocalizedDescription()); } }); }); } catch (Exception e) { Debug.Log("remove match error: " + e + ": " + e.StackTrace); } }
/// <summary> /// Sets a low-level GKTurnBasedMatch object as the current match. /// Some processing needs to happen in the background, and when it is done, /// one of the two events: TurnChanged or MatchEnded, will /// be raised. At that time, the currentMatch property will be set to a /// new high-level TurnBasedMatch object. /// <p></p> /// Be careful when using this method because it mixes the low-level and high-level API. /// </summary> /// <param name="match">Match.</param> public static void SetNativeMatchAsCurrentMatch(GKTurnBasedMatch match) { var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch; match = null; tbmatch.ReloadPlayers(delegate() { SetCurrentMatch(tbmatch); if (tbmatch.status == GKTurnBasedMatchStatus.Ended) { if (_matchEndedHandlers != null) { _matchEndedHandlers(null, new MatchEventArgs(tbmatch)); } } else { if (_turnChangedHandlers != null) { _turnChangedHandlers(null, new TurnChangedEventArgs(tbmatch)); } } tbmatch = null; }); }
internal static void _OnExchangeCompleted(GKTurnBasedMatch match, GKTurnBasedExchange exchange, object[] replies) { if (_exchangeCompletedHandlers != null) { _exchangeCompletedHandlers(null, new ExchangeEventArgs(match, exchange)); } }
internal static void _OnExchangeRequest(GKTurnBasedMatch match, GKTurnBasedExchange exchange) { if (_exchangeRequestReceivedHandlers != null) { _exchangeRequestReceivedHandlers(null, new ExchangeEventArgs(match, exchange)); } }
public override void PlayerWantsToQuitMatch(GKPlayer player, GKTurnBasedMatch match) { if (MatchDelegate != null) { MatchDelegate(TurnBasedMatch.FromGKTurnBasedMatch(match), false, true); } }
internal static void _OnExchangeCancellation(GKTurnBasedMatch match, GKTurnBasedExchange exchange) { if (_exchangeCancelledHandlers != null) { _exchangeCancelledHandlers(null, new ExchangeEventArgs(match, exchange)); } }
/// <summary> /// Construct a new instance from <see cref="EasyMobile.iOS.GameKit.GKTurnBasedMatch"/> object. /// </summary> /// <returns>The GK turn based match.</returns> /// <param name="turnBasedMatch">Turn based match.</param> internal static TurnBasedMatch FromGKTurnBasedMatch(GKTurnBasedMatch turnBasedMatch) { if (turnBasedMatch == null) { return(null); } // Cache values to save on calls to native side. var currentGKParticipant = turnBasedMatch.CurrentParticipant; var nsParticipantsArray = turnBasedMatch.Participants; var nsMatchData = turnBasedMatch.MatchData; var currentGKPlayer = currentGKParticipant != null ? currentGKParticipant.Player : null; var allParticipants = nsParticipantsArray == null ? null : nsParticipantsArray.ToArray( ptr => InteropObjectFactory <GKTurnBasedParticipant> .FromPointer(ptr, p => new GKTurnBasedParticipant(p))); var matchData = nsMatchData != null && nsMatchData.Length > 0 ? nsMatchData.ToBytes() : null; // if data length == 0 we also return null to have a consistent behaviour between GC & GPG. return(new TurnBasedMatch( turnBasedMatch.MatchID, allParticipants == null ? 0 : allParticipants.Length, matchData, GKLocalPlayer.LocalPlayer == null ? null : GKLocalPlayer.LocalPlayer.PlayerID, // GKTurnBasedMatch doesn't have 'SelfParticipantId', using the equivalent local player's ID allParticipants == null ? null : allParticipants.Where(p => p.Player != null).Select(p => Participant.FromGKTurnBasedParticipant(p)).ToArray(), // only returns participants who have joined currentGKPlayer == null ? null : currentGKPlayer.PlayerID, turnBasedMatch.Status.ToTurnBasedMatchStatus()) { GC_TurnBasedMatch = turnBasedMatch }); }
internal static void _OnTurnEvent(GKTurnBasedMatch match, bool didBecomeActive) { var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch; match = null; tbmatch.ReloadPlayers(delegate() { // set current match if it matches the id if (didBecomeActive) { SetCurrentMatch(tbmatch); } else { _CheckSetCurrentMatch(tbmatch); } if (_turnChangedHandlers != null) { _turnChangedHandlers(null, new TurnChangedEventArgs(tbmatch)); } tbmatch = null; }); }
public static void KillMatch(GKTurnBasedMatch match) { Logger.W ("Removing match..." + match.MatchID + " " + match.Status); match.Participants [0].MatchOutcome = GKTurnBasedMatchOutcome.Won; match.Participants [1].MatchOutcome = GKTurnBasedMatchOutcome.Lost; NSData d; if (match.MatchData == null) { d = NSData.FromString ("Wabon"); } else { d = match.MatchData; } match.EndMatchInTurn (d, (e1) => { if (e1 != null) { Logger.E ("GameCenterHelper.KillMatch - EndMatchInTurn", e1); } match.Remove (new GKNotificationHandler ((e2) => { if (e2 != null) { Logger.E ("GameCenterHelper.KillMatch - Remove", e2); } })); }); }
private void _RematchFound(GKTurnBasedMatch match, NSError error) { if (match != null) { TurnBasedMatchesController._OnMatchMakerFoundMatch(match); } else if (error != null) { TurnBasedMatchesController._OnMatchMakerFailed(error); } }
public override void PlayerMatchEnded(GKPlayer player, GKTurnBasedMatch match) { if (CloseAndResetMatchmakerVC != null) { CloseAndResetMatchmakerVC(); } if (MatchDelegate != null) { MatchDelegate(TurnBasedMatch.FromGKTurnBasedMatch(match), false, false); } }
public override void PlayerReceivedTurnEventForMatch(GKPlayer player, GKTurnBasedMatch match, bool didBecomeActive) { if (CloseAndResetMatchmakerVC != null) { CloseAndResetMatchmakerVC(); } if (MatchDelegate != null) { MatchDelegate(TurnBasedMatch.FromGKTurnBasedMatch(match), didBecomeActive, false); } }
public void GetAllMatches(Action <TurnBasedMatch[]> callback) { Util.NullArgumentTest(callback); GKTurnBasedMatch.LoadMatches( (gkMatches, nsError) => { TurnBasedMatch[] matches = gkMatches != null ? gkMatches.Select(gkm => TurnBasedMatch.FromGKTurnBasedMatch(gkm)).ToArray() : null; callback(matches); }); }
internal static void _OnPlayerQuit(GKTurnBasedMatch match) { var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch; match = null; tbmatch.ReloadPlayers(delegate() { if (_localPlayerQuitHandlers != null) { _localPlayerQuitHandlers(null, new MatchEventArgs(tbmatch)); } tbmatch = null; }); }
/// <summary> /// Read and parse match data to extract match information. /// </summary> /// <returns>The puzzle from match.</returns> /// <param name="match">Match.</param> public static TransferablePuzzleData GetPuzzleFromMatch(GKTurnBasedMatch match) { // Filter obviously invalid matches if (match.MatchData == null || match.MatchData.Length == 0) { Logger.E("Match without data! Maybe an old one? Shouldn't happend in production."); return(null); } try { // Try to get the XML inside string xml = NSString.FromData(match.MatchData, NSStringEncoding.UTF8); TransferablePuzzleData tp = null; XmlSerializer xmlSerializer = new XmlSerializer(typeof(TransferablePuzzleData)); using (StringReader reader = new StringReader(xml)) { tp = (TransferablePuzzleData)xmlSerializer.Deserialize(reader); } xmlSerializer = null; // Save the image if we don't have it locally if (tp != null) { if (string.IsNullOrEmpty(tp.Base64Image) == false) { if (File.Exists(tp.Puzzle.Filename) == false) { byte[] imgRaw = Convert.FromBase64String(tp.Base64Image); NSData imageData = NSData.FromArray(imgRaw); UIImage img = UIImage.LoadFromData(imageData); NSError err = null; img.AsPNG().Save(tp.Puzzle.Filename, false, out err); } } } return(tp); } catch (Exception e) { Logger.E("GameCenterPlayer.FoundMatch", e); return(null); } }
internal static void _OnMatchMakerFoundMatch(GKTurnBasedMatch match) { var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch; match = null; tbmatch.ReloadPlayers(delegate() { // set current match if it matches the id SetCurrentMatch(tbmatch); if (_turnChangedHandlers != null) { _turnChangedHandlers(null, new TurnChangedEventArgs(tbmatch)); } tbmatch = null; }); }
public void CreateQuickMatch(MatchRequest request, Action <bool, TurnBasedMatch> callback) { Util.NullArgumentTest(request); Util.NullArgumentTest(callback); using (var gkReq = request.ToGKMatchRequest()) { GKTurnBasedMatch.FindMatchForRequest(gkReq, (gkMatch, nsError) => { TurnBasedMatch match = TurnBasedMatch.FromGKTurnBasedMatch(gkMatch); if (nsError != null) { Debug.Log("Failed to create quick match with error " + nsError.LocalizedDescription); } if (callback != null) { callback(nsError == null, match); } }); } }
/// <summary> /// List matches with friends /// </summary> /// <param name="listLoaded">List loaded.</param> public static void GetFriendsPuzzles(Action <List <PuzzleData> > listLoaded) { Logger.I("Game center: requesting turn based matches..."); GKTurnBasedMatch.LoadMatches((matches, error) => { if (error != null) { Logger.E("Game Center: match list failed... ", error); } else { Logger.I("Game center: " + matches.Length + " turn based matches found."); List <PuzzleData> puzzles = new List <PuzzleData> (); foreach (GKTurnBasedMatch match in matches) { // Deserialize data TransferablePuzzleData tp = GetPuzzleFromMatch(match); if (tp != null) { tp.Puzzle.MatchId = match.MatchID; tp.Puzzle.Match = match; puzzles.Add(tp.Puzzle); } } if (listLoaded != null) { listLoaded(puzzles); } } }); }
public override void ReceivedExchangeReplies(GKPlayer player, object[] replies, GKTurnBasedExchange exchange, GKTurnBasedMatch match) { TurnBasedMatchesController._OnExchangeCompleted(match, exchange, replies); }
public override void PlayerQuitForMatch(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match) { Logger.I("MatchMakerDelegate.PlayerQuitForMatch"); // Mark current player as quiter foreach (GKTurnBasedParticipant participant in match.Participants) { if (participant.PlayerID == GKLocalPlayer.LocalPlayer.PlayerID) { participant.MatchOutcome = GKTurnBasedMatchOutcome.Quit; } else { // Win? participant.MatchOutcome = GKTurnBasedMatchOutcome.Won; } } //viewController.DismissViewController (true, null); // Delete the match match.Remove(new GKNotificationHandler((error) => { Logger.E("MatchMakerDelegate.PlayerQuitForMatch: " + error.DebugDescription); })); if (PlayerQuitCallback != null) { PlayerQuitCallback(); } }
void turnBasedMatchmakerViewControllerPlayerQuitEvent(GKTurnBasedMatch match) { Debug.Log("turnBasedMatchmakerViewControllerPlayerQuitEvent: " + match); }
/// <summary> /// Initializes a new instance of the <see cref="U3DXT.iOS.GameKit.ExchangeEventArgs"/> class. /// </summary> /// <param name="match">Match.</param> /// <param name="exchange">Exchange.</param> public ExchangeEventArgs(GKTurnBasedMatch match, GKTurnBasedExchange exchange) { this.match = match; this.exchange = exchange; }
void handleMatchEndedEvent(GKTurnBasedMatch match) { Debug.Log("handleMatchEndedEvent: " + match); }
public override void PlayerQuit(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match) { TurnBasedMatchesController._OnPlayerQuit(match); }
public static VersusMatch ParseMatch(GKTurnBasedMatch match) { VersusMatch existingMatch = new VersusMatch (); existingMatch.GKMatch = match; if (match.MatchData == null) { return null; } // Match has data: it's not the first turn if (match.MatchData.Length > 0) { try { string jsonBase64 = NSString.FromData (match.MatchData, NSStringEncoding.UTF8); string json = System.Text.Encoding.UTF8.GetString (Convert.FromBase64String (jsonBase64)); existingMatch.FromJson (json.ToString ()); } catch (Exception e) { Logger.E ("GameCenterHelper.ParseMatch", e); return null; } } // No data: new match, else { existingMatch.MatchId = match.MatchID; existingMatch.Player1Id = match.Participants [0].PlayerID; existingMatch.Player2Id = match.Participants [1].PlayerID; // Set up outcomes match.Participants [0].MatchOutcome = GKTurnBasedMatchOutcome.First; match.Participants [1].MatchOutcome = GKTurnBasedMatchOutcome.Second; // TODO Select filter existingMatch.Filter = new Filter ("0", "MP Filter", "defaultIcon", // Test data 1990, 2050, null, new System.Collections.Generic.List<string> () { "combat" }, null); } return existingMatch; }
public override void PlayerQuit(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match) { TurnBasedMatchesController._OnPlayerQuit(match); }
public override void DidFind(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match) { UIApplication.deviceRootViewController.DismissViewController(true, null); TurnBasedMatchesController._OnMatchMakerFoundMatch(match); }
private void _RematchFound(GKTurnBasedMatch match, NSError error) { if (match != null) { TurnBasedMatchesController._OnMatchMakerFoundMatch(match); } else if (error != null) { TurnBasedMatchesController._OnMatchMakerFailed(error); } }
/// <summary> /// Initializes a new instance of the <see cref="U3DXT.iOS.GameKit.ExchangeEventArgs"/> class. /// </summary> /// <param name="match">Match.</param> /// <param name="exchange">Exchange.</param> public ExchangeEventArgs(GKTurnBasedMatch match, GKTurnBasedExchange exchange) { this.match = match; this.exchange = exchange; }
public override void DidFind(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match) { UIApplication.SharedApplication().keyWindow.rootViewController.DismissViewController(true, null); TurnBasedMatchesController._OnMatchMakerFoundMatch(match); }
internal static void _OnExchangeCancellation(GKTurnBasedMatch match, GKTurnBasedExchange exchange) { if (_exchangeCancelledHandlers != null) _exchangeCancelledHandlers(null, new ExchangeEventArgs(match, exchange)); }
public override void ReceivedExchangeCancellation(GKPlayer player, GKTurnBasedExchange exchange, GKTurnBasedMatch match) { TurnBasedMatchesController._OnExchangeCancellation(match, exchange); }
internal static void _OnExchangeRequest(GKTurnBasedMatch match, GKTurnBasedExchange exchange) { if (_exchangeRequestReceivedHandlers != null) _exchangeRequestReceivedHandlers(null, new ExchangeEventArgs(match, exchange)); }
public override void Ended(GKPlayer player, GKTurnBasedMatch match) { TurnBasedMatchesController._OnMatchEnded(match); }
internal static void _OnPlayerQuit(GKTurnBasedMatch match) { var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch; match = null; tbmatch.ReloadPlayers(delegate() { if (_localPlayerQuitHandlers != null) _localPlayerQuitHandlers(null, new MatchEventArgs(tbmatch)); tbmatch = null; }); }
void handleTurnEventEvent(GKTurnBasedMatch match) { Debug.Log("handleTurnEventEvent: " + match); }
public override void HandleTurnEvent(GKTurnBasedMatch match, bool didBecomeActive) { TurnBasedMatchesController._OnTurnEvent(match, didBecomeActive); }
void turnBasedMatchmakerViewControllerDidFindMatchEvent(GKTurnBasedMatch match) { Debug.Log("turnBasedMatchmakerViewControllerDidFindMatchEvent: " + match); }
public override void ReceivedTurnEvent(GKPlayer player, GKTurnBasedMatch match, bool didBecomeActive) { TurnBasedMatchesController._OnTurnEvent(match, didBecomeActive); }
public override void ReceivedExchangeRequest(GKPlayer player, GKTurnBasedExchange exchange, GKTurnBasedMatch match) { TurnBasedMatchesController._OnExchangeRequest(match, exchange); }
public override void FoundMatch(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match) { Logger.I("MatchMakerDelegate.FoundMatch"); viewController.DismissViewController(true, null); PuzzleData puzzleData = new PuzzleData(); puzzleData.Match = match; puzzleData.MatchId = match.MatchID; bool matchError = false; if (match.MatchData.Length > 0) { // Match has data // var tp = GameCenterHelper.GetPuzzleFromMatch (match); // TODO ? } else { // No data: new match // Set up outcomes // -> Player who sent the picture set a time first match.Participants [0].MatchOutcome = GKTurnBasedMatchOutcome.First; match.Participants [1].MatchOutcome = GKTurnBasedMatchOutcome.Second; } if (matchError == false) { match.Remove(new GKNotificationHandler((e) => {})); if (MatchFoundCallback != null) { MatchFoundCallback(puzzleData); } } else { if (ErrorCallback != null) { ErrorCallback(); } } }
/// <summary> /// Sets a low-level GKTurnBasedMatch object as the current match. /// Some processing needs to happen in the background, and when it is done, /// one of the two events: TurnChanged or MatchEnded, will /// be raised. At that time, the currentMatch property will be set to a /// new high-level TurnBasedMatch object. /// <p></p> /// Be careful when using this method because it mixes the low-level and high-level API. /// </summary> /// <param name="match">Match.</param> public static void SetNativeMatchAsCurrentMatch(GKTurnBasedMatch match) { var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch; match = null; tbmatch.ReloadPlayers(delegate() { SetCurrentMatch(tbmatch); if (tbmatch.status == GKTurnBasedMatchStatus.Ended) { if (_matchEndedHandlers != null) _matchEndedHandlers(null, new MatchEventArgs(tbmatch)); } else { if (_turnChangedHandlers != null) _turnChangedHandlers(null, new TurnChangedEventArgs(tbmatch)); } tbmatch = null; }); }
private static void _EndAndRemoveMatch(GKTurnBasedMatch match) { try { (match.participants[0] as GKTurnBasedParticipant).matchOutcome = GKTurnBasedMatchOutcome.Won; for (var i=match.participants.Length-1; i>0; i--) (match.participants[i] as GKTurnBasedParticipant).matchOutcome = GKTurnBasedMatchOutcome.Lost; match.EndMatchInTurn((match.matchData != null) ? match.matchData : new NSData(), delegate(NSError error) { if (error != null) { Debug.Log("end match error: " + error.LocalizedDescription()); } match.Remove(delegate(NSError error2) { if (error2 != null) Debug.Log("remove match error: " + error2.LocalizedDescription()); }); }); } catch (Exception e) { Debug.Log("remove match error: " + e + ": " + e.StackTrace); } }
internal static void _OnExchangeCompleted(GKTurnBasedMatch match, GKTurnBasedExchange exchange, object[] replies) { if (_exchangeCompletedHandlers != null) _exchangeCompletedHandlers(null, new ExchangeEventArgs(match, exchange)); }
public override void FoundMatch(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match) { Logger.I ("MatchMakerDelegate.FoundMatch"); viewController.DismissViewController (true, null); PuzzleData puzzleData = new PuzzleData (); puzzleData.Match = match; puzzleData.MatchId = match.MatchID; bool matchError = false; if (match.MatchData.Length > 0) { // Match has data // var tp = GameCenterHelper.GetPuzzleFromMatch (match); // TODO ? } else { // No data: new match // Set up outcomes // -> Player who sent the picture set a time first match.Participants [0].MatchOutcome = GKTurnBasedMatchOutcome.First; match.Participants [1].MatchOutcome = GKTurnBasedMatchOutcome.Second; } if (matchError == false) { match.Remove (new GKNotificationHandler ((e) => {})); if (MatchFoundCallback != null) { MatchFoundCallback (puzzleData); } } else { if (ErrorCallback != null) { ErrorCallback (); } } }
internal static void _OnMatchMakerFoundMatch(GKTurnBasedMatch match) { var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch; match = null; tbmatch.ReloadPlayers(delegate() { // set current match if it matches the id SetCurrentMatch(tbmatch); if (_turnChangedHandlers != null) _turnChangedHandlers(null, new TurnChangedEventArgs(tbmatch)); tbmatch = null; }); }
public override void FoundMatch(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match) { Logger.I("Versus match found..."); viewController.DismissViewController(true, null); this.parent.CurrentGKMatch = match; bool matchError = false; VersusMatch versusMatch = GameCenterHelper.ParseMatch(match); if (versusMatch == null) { matchError = true; } else { if (MatchFoundCallback != null) { MatchFoundCallback(versusMatch); } } if (matchError) { GameCenterHelper.KillMatch(match); } }
internal static void _OnTurnEvent(GKTurnBasedMatch match, bool didBecomeActive) { var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch; match = null; tbmatch.ReloadPlayers(delegate() { // set current match if it matches the id if (didBecomeActive) SetCurrentMatch(tbmatch); else _CheckSetCurrentMatch(tbmatch); if (_turnChangedHandlers != null) _turnChangedHandlers(null, new TurnChangedEventArgs(tbmatch)); tbmatch = null; }); }
public override void HandleMatchEnded(GKTurnBasedMatch match) { TurnBasedMatchesController._OnMatchEnded(match); }
/// <summary> /// Read and parse match data to extract match information. /// </summary> /// <returns>The puzzle from match.</returns> /// <param name="match">Match.</param> public static TransferablePuzzleData GetPuzzleFromMatch(GKTurnBasedMatch match) { // Filter obviously invalid matches if (match.MatchData == null || match.MatchData.Length == 0) { Logger.E ("Match without data! Maybe an old one? Shouldn't happend in production."); return null; } try { // Try to get the XML inside string xml = NSString.FromData (match.MatchData, NSStringEncoding.UTF8); TransferablePuzzleData tp = null; XmlSerializer xmlSerializer = new XmlSerializer (typeof(TransferablePuzzleData)); using (StringReader reader = new StringReader(xml)) { tp = (TransferablePuzzleData)xmlSerializer.Deserialize (reader); } xmlSerializer = null; // Save the image if we don't have it locally if (tp != null) { if (string.IsNullOrEmpty (tp.Base64Image) == false) { if (File.Exists (tp.Puzzle.Filename) == false) { byte[] imgRaw = Convert.FromBase64String (tp.Base64Image); NSData imageData = NSData.FromArray (imgRaw); UIImage img = UIImage.LoadFromData (imageData); NSError err = null; img.AsPNG ().Save (tp.Puzzle.Filename, false, out err); } } } return tp; } catch (Exception e) { Logger.E ("GameCenterPlayer.FoundMatch", e); return null; } }
/// <summary> /// A helper function to end and remove all turn-based matches that this player is participating in. /// This should be used for testing only. /// </summary> public static void RemoveAllMyMatches() { GKTurnBasedMatch.LoadMatches(_FoundMyMatches); }
public override void PlayerQuitForMatch(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match) { Logger.I ("MatchMakerDelegate.PlayerQuitForMatch"); // Mark current player as quiter foreach (GKTurnBasedParticipant participant in match.Participants) { if (participant.PlayerID == GKLocalPlayer.LocalPlayer.PlayerID) { participant.MatchOutcome = GKTurnBasedMatchOutcome.Quit; } else { // Win? participant.MatchOutcome = GKTurnBasedMatchOutcome.Won; } } //viewController.DismissViewController (true, null); // Delete the match match.Remove (new GKNotificationHandler ((error) => { Logger.E ("MatchMakerDelegate.PlayerQuitForMatch: " + error.DebugDescription); })); if (PlayerQuitCallback != null) PlayerQuitCallback (); }
public override void SetMatch(VersusMatch match) { Logger.I("Setting current match to player: " + match.MatchId); this.CurrentMatch = match; this.CurrentGKMatch = match.GKMatch; }