Exemplo n.º 1
0
            public void ChooseGKSavedGame(iOSGKSavedGame chosenGame, byte[] data)
            {
                if (chosenGame != _base && chosenGame != _remote)
                {
                    _completeCallback(null, "Attempted to choose a saved game that was not part of the conflict.");
                    return;
                }

                var conflictingGames = new iOSGKSavedGame[] { _base, _remote };

                if (data != null)
                {
                    RequestResolveConflict(conflictingGames, data);
                }
                else
                {
                    // Load data of the chosen game
                    InternalLoadSavedGameData(chosenGame, (byte[] chosenData, string loadDataError) =>
                    {
                        if (!string.IsNullOrEmpty(loadDataError))
                        {
                            // Loading data failed -> cannot resolve conflict
                            _completeCallback(null, loadDataError);
                        }
                        else
                        {
                            // Loading data succeeded -> now resolve conflict using the chosen game data
                            RequestResolveConflict(conflictingGames, chosenData);
                        }
                    });
                }
            }
Exemplo n.º 2
0
        internal static void InternalSaveGameData(iOSGKSavedGame savedGame, byte[] data, Action <iOSGKSavedGame, string> callback)
        {
            Util.NullArgumentTest(savedGame);
            Util.NullArgumentTest(data);
            Util.NullArgumentTest(callback);

            iOSSavedGameNative._SaveGameData(
                savedGame.ToPointer(),
                data,
                data.Length,
                InternalSaveGameDataCallback,
                PInvokeCallbackUtil.ToIntPtr <SaveGameDataResponse>(
                    response =>
            {
                string error = response.GetError();
                if (string.IsNullOrEmpty(error))
                {
                    callback(response.GetSavedGame(), error);
                }
                else
                {
                    callback(null, error);
                }
            },
                    SaveGameDataResponse.FromPointer
                    )
                );
        }
Exemplo n.º 3
0
 internal NativeConflictResolver(iOSGKSavedGame baseGame, iOSGKSavedGame remoteGame,
                                 Action <iOSGKSavedGame, string> completeCallback, Action <iOSGKSavedGame[]> repeatAction)
 {
     this._base                   = Util.NullArgumentTest(baseGame);
     this._remote                 = Util.NullArgumentTest(remoteGame);
     this._completeCallback       = Util.NullArgumentTest(completeCallback);
     this._repeatResolveConflicts = Util.NullArgumentTest(repeatAction);
 }
Exemplo n.º 4
0
        public void OpenWithManualConflictResolution(string name, bool prefetchDataOnConflict,
                                                     SavedGameConflictResolver resolverFunction,
                                                     Action <SavedGame, string> completedCallback)
        {
            Util.NullArgumentTest(name);
            Util.NullArgumentTest(resolverFunction);
            Util.NullArgumentTest(completedCallback);

            InternalOpenWithManualConflictResolution(
                name,
                prefetchDataOnConflict,
                // Internal conflict callback
                (IIOSConflictResolver resolver,
                 iOSGKSavedGame baseGame, byte[] baseData,
                 iOSGKSavedGame remoteGame, byte[] remoteData) =>
            {
                // Invoke the user's conflict resolving function, get their choice
                var choice = resolverFunction(new SavedGame(baseGame), baseData, new SavedGame(remoteGame), remoteData);

                // Let the internal client know the selected saved game,
                // if the passed data is null if will loaded automatically from the chosen iOSGKSavedGame
                iOSGKSavedGame selectedGame = null;
                byte[] selectedData         = null;

                switch (choice)
                {
                case SavedGameConflictResolutionStrategy.UseBase:
                    selectedGame = baseGame;
                    selectedData = baseData;
                    break;

                case SavedGameConflictResolutionStrategy.UseRemote:
                    selectedGame = remoteGame;
                    selectedData = remoteData;
                    break;

                default:
                    Debug.LogError("Unhandled conflict resolution strategy: " + choice.ToString());
                    break;
                }

                resolver.ChooseGKSavedGame(selectedGame, selectedData);
            },
                // Completed callback
                (iOSGKSavedGame gkSavedGame, string error) =>
            {
                completedCallback(gkSavedGame != null ? new SavedGame(gkSavedGame) : null, error);
            }
                );
        }
Exemplo n.º 5
0
        internal static void InternalDeleteSavedGame(iOSGKSavedGame savedGame, Action <string> callback)
        {
            Util.NullArgumentTest(savedGame);
            Util.NullArgumentTest(callback);

            iOSSavedGameNative._DeleteSavedGame(
                savedGame.Name,
                InternalDeleteSavedGameCallback,
                PInvokeCallbackUtil.ToIntPtr <DeleteSavedGameResponse>(
                    response =>
            {
                callback(response.GetError());
            },
                    DeleteSavedGameResponse.FromPointer
                    )
                );
        }
Exemplo n.º 6
0
        internal static void InternalLoadSavedGameData(iOSGKSavedGame savedGame, Action <byte[], string> callback)
        {
            Util.NullArgumentTest(savedGame);
            Util.NullArgumentTest(callback);

            iOSSavedGameNative._LoadSavedGameData(
                savedGame.ToPointer(),
                InternalLoadSavedGameDataCallback,
                PInvokeCallbackUtil.ToIntPtr <LoadSavedGameDataResponse>(
                    response =>
            {
                callback(response.GetData(), response.GetError());
            },
                    LoadSavedGameDataResponse.FromPointer
                    )
                );
        }
Exemplo n.º 7
0
 internal SavedGame(iOSGKSavedGame gkSavedGame)
 {
     Helper.NullArgumentTest(gkSavedGame);
     GKSavedGame = gkSavedGame;
 }
Exemplo n.º 8
0
 internal SavedGame(iOSGKSavedGame gkSavedGame)
 {
     Util.NullArgumentTest(gkSavedGame);
     GKSavedGame = gkSavedGame;
 }