// 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));
     }
 }
Exemplo n.º 3
0
        /// <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;
            });
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        /// <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;
            });
        }
Exemplo n.º 6
0
 internal static void _OnExchangeCompleted(GKTurnBasedMatch match, GKTurnBasedExchange exchange, object[] replies)
 {
     if (_exchangeCompletedHandlers != null)
     {
         _exchangeCompletedHandlers(null, new ExchangeEventArgs(match, exchange));
     }
 }
Exemplo n.º 7
0
 internal static void _OnExchangeRequest(GKTurnBasedMatch match, GKTurnBasedExchange exchange)
 {
     if (_exchangeRequestReceivedHandlers != null)
     {
         _exchangeRequestReceivedHandlers(null, new ExchangeEventArgs(match, exchange));
     }
 }
Exemplo n.º 8
0
 public override void PlayerWantsToQuitMatch(GKPlayer player, GKTurnBasedMatch match)
 {
     if (MatchDelegate != null)
     {
         MatchDelegate(TurnBasedMatch.FromGKTurnBasedMatch(match), false, true);
     }
 }
Exemplo n.º 9
0
 internal static void _OnExchangeCancellation(GKTurnBasedMatch match, GKTurnBasedExchange exchange)
 {
     if (_exchangeCancelledHandlers != null)
     {
         _exchangeCancelledHandlers(null, new ExchangeEventArgs(match, exchange));
     }
 }
Exemplo n.º 10
0
        /// <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
            });
        }
Exemplo n.º 11
0
        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;
            });
        }
Exemplo n.º 12
0
        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);
                    }

                }));
            });
        }
Exemplo n.º 13
0
 private void _RematchFound(GKTurnBasedMatch match, NSError error)
 {
     if (match != null)
     {
         TurnBasedMatchesController._OnMatchMakerFoundMatch(match);
     }
     else if (error != null)
     {
         TurnBasedMatchesController._OnMatchMakerFailed(error);
     }
 }
Exemplo n.º 14
0
            public override void PlayerMatchEnded(GKPlayer player, GKTurnBasedMatch match)
            {
                if (CloseAndResetMatchmakerVC != null)
                {
                    CloseAndResetMatchmakerVC();
                }

                if (MatchDelegate != null)
                {
                    MatchDelegate(TurnBasedMatch.FromGKTurnBasedMatch(match), false, false);
                }
            }
Exemplo n.º 15
0
            public override void PlayerReceivedTurnEventForMatch(GKPlayer player, GKTurnBasedMatch match, bool didBecomeActive)
            {
                if (CloseAndResetMatchmakerVC != null)
                {
                    CloseAndResetMatchmakerVC();
                }

                if (MatchDelegate != null)
                {
                    MatchDelegate(TurnBasedMatch.FromGKTurnBasedMatch(match), didBecomeActive, false);
                }
            }
Exemplo n.º 16
0
        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);
            });
        }
Exemplo n.º 17
0
        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;
            });
        }
Exemplo n.º 18
0
        /// <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);
            }
        }
Exemplo n.º 19
0
        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;
            });
        }
Exemplo n.º 20
0
        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);
                    }
                });
            }
        }
Exemplo n.º 21
0
        /// <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);
                    }
                }
            });
        }
Exemplo n.º 22
0
 public override void ReceivedExchangeReplies(GKPlayer player, object[] replies, GKTurnBasedExchange exchange, GKTurnBasedMatch match)
 {
     TurnBasedMatchesController._OnExchangeCompleted(match, exchange, replies);
 }
Exemplo n.º 23
0
            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);
 }
Exemplo n.º 25
0
 /// <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);
 }
Exemplo n.º 28
0
        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;
        }
Exemplo n.º 29
0
 public override void PlayerQuit(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match)
 {
     TurnBasedMatchesController._OnPlayerQuit(match);
 }
Exemplo n.º 30
0
        public override void DidFind(GKTurnBasedMatchmakerViewController viewController, GKTurnBasedMatch match)
        {
            UIApplication.deviceRootViewController.DismissViewController(true, null);

            TurnBasedMatchesController._OnMatchMakerFoundMatch(match);
        }
Exemplo n.º 31
0
 private void _RematchFound(GKTurnBasedMatch match, NSError error)
 {
     if (match != null) {
         TurnBasedMatchesController._OnMatchMakerFoundMatch(match);
     } else if (error != null) {
         TurnBasedMatchesController._OnMatchMakerFailed(error);
     }
 }
Exemplo n.º 32
0
 /// <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);
        }
Exemplo n.º 34
0
 internal static void _OnExchangeCancellation(GKTurnBasedMatch match, GKTurnBasedExchange exchange)
 {
     if (_exchangeCancelledHandlers != null)
         _exchangeCancelledHandlers(null, new ExchangeEventArgs(match, exchange));
 }
Exemplo n.º 35
0
 public override void ReceivedExchangeCancellation(GKPlayer player, GKTurnBasedExchange exchange, GKTurnBasedMatch match)
 {
     TurnBasedMatchesController._OnExchangeCancellation(match, exchange);
 }
Exemplo n.º 36
0
 internal static void _OnExchangeRequest(GKTurnBasedMatch match, GKTurnBasedExchange exchange)
 {
     if (_exchangeRequestReceivedHandlers != null)
         _exchangeRequestReceivedHandlers(null, new ExchangeEventArgs(match, exchange));
 }
Exemplo n.º 37
0
 public override void Ended(GKPlayer player, GKTurnBasedMatch match)
 {
     TurnBasedMatchesController._OnMatchEnded(match);
 }
Exemplo n.º 38
0
        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);
 }
Exemplo n.º 40
0
 public override void HandleTurnEvent(GKTurnBasedMatch match, bool didBecomeActive)
 {
     TurnBasedMatchesController._OnTurnEvent(match, didBecomeActive);
 }
 void turnBasedMatchmakerViewControllerDidFindMatchEvent(GKTurnBasedMatch match)
 {
     Debug.Log("turnBasedMatchmakerViewControllerDidFindMatchEvent: " + match);
 }
Exemplo n.º 42
0
 public override void ReceivedTurnEvent(GKPlayer player, GKTurnBasedMatch match, bool didBecomeActive)
 {
     TurnBasedMatchesController._OnTurnEvent(match, didBecomeActive);
 }
Exemplo n.º 43
0
 public override void ReceivedExchangeRequest(GKPlayer player, GKTurnBasedExchange exchange, GKTurnBasedMatch match)
 {
     TurnBasedMatchesController._OnExchangeRequest(match, exchange);
 }
Exemplo n.º 44
0
            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();
                    }
                }
            }
Exemplo n.º 45
0
        /// <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;
            });
        }
Exemplo n.º 46
0
        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);
            }
        }
Exemplo n.º 47
0
 internal static void _OnExchangeCompleted(GKTurnBasedMatch match, GKTurnBasedExchange exchange, object[] replies)
 {
     if (_exchangeCompletedHandlers != null)
         _exchangeCompletedHandlers(null, new ExchangeEventArgs(match, exchange));
 }
Exemplo n.º 48
0
            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 ();
                    }
                }
            }
Exemplo n.º 49
0
        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;
            });
        }
Exemplo n.º 50
0
            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);
                }
            }
Exemplo n.º 51
0
        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;
            });
        }
Exemplo n.º 52
0
 public override void HandleMatchEnded(GKTurnBasedMatch match)
 {
     TurnBasedMatchesController._OnMatchEnded(match);
 }
Exemplo n.º 53
0
        /// <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;
            }
        }
Exemplo n.º 54
0
 /// <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);
 }
Exemplo n.º 55
0
            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 ();
            }
Exemplo n.º 56
0
 public override void SetMatch(VersusMatch match)
 {
     Logger.I("Setting current match to player: " + match.MatchId);
       this.CurrentMatch = match;
       this.CurrentGKMatch = match.GKMatch;
 }