Example #1
0
        //ToDo: Refactor IPlayer and get rid of this overload.
        /// <summary>
        /// Method called to initialize the Game Data Logger for a new game
        /// </summary>
        public void BeginLoggingSession(string gameHost, IEnumerable<Friend> players)
        {
            _gameData = new GameData { GameHost = gameHost };

            foreach (var p in players)
            {
                _gameData.PlayerDictionary.Add(p.Alias, null);
            }
        }
Example #2
0
        /// <summary>
        /// Method called to complete the logging session.  It saves the current game data to disk.
        /// </summary>
        public async Task<GameData> EndLoggingSession()
        {
            _gameData.ProcessGameData();

            var gdh = GameDataHistory.GetInstance();

            await gdh.StoreGameData(_gameData);

            var tempData = _gameData;

            _gameData = null;

            return tempData;
        }
Example #3
0
        /// <summary>
        /// Adds the pending game data to local storage.
        /// </summary>
        /// <returns></returns>
        public async Task StoreGameData(GameData dataToSave)
        {
            if (dataToSave.GameDuration <= 0 ||
                dataToSave.GameHost == null ||
                dataToSave.GameMoves == null ||
                dataToSave.PlayerDictionary == null ||
                dataToSave.Winner == null)
            {
#if DEBUG
                throw new ArgumentException("Invalid game data.");
#else
                return;
#endif
            }


            //
            // Retrieve existing data in storage so that it isn't overwritten.
            //

            _gameDataList._GameData.Clear();
            _gameDataList = await RetrieveGameData();
            _gameDataList._GameData.Add(dataToSave);


            //
            // Now write the data to the file.
            //

            var localFolder = ApplicationData.Current.LocalFolder;

            var file = await localFolder.CreateFileAsync(
                BaseFileName,
                CreationCollisionOption.OpenIfExists);

            using (var streamFile = await file.OpenStreamForWriteAsync())
            {
                    var binaryWriter = new BinaryWriter(streamFile);

                    _gameDataList.Write(binaryWriter);
            }
        }
        public void Initialize()
        {
            _testGameMoveDataPoint = new GameMoveDataPoint { MoveType = MoveType.Dump, Player = "NewPlayer", TimeOfMove = 5 };

            _playerGameStats = new PlayerGameStats
                {
                    AvgTimeBetweenDumps = 10,
                    AvgTimeBetweenPeels = 5,
                    IsWinner = true,
                    NumberOfDumps = 3,
                    NumberOfPeels = 0,
                    PerformedFirstPeel = false,
                    RawGameData = new List<GameMoveDataPoint>() {_testGameMoveDataPoint, _testGameMoveDataPoint, _testGameMoveDataPoint}
                };

            _gameData = new GameData {GameDuration = 10, GameHost = "GameHost", GameStartTime = DateTime.Now, Winner = "NewPlayer"};
            _gameData.GameMoves.Add(_testGameMoveDataPoint);
            _gameData.GameMoves.Add(_testGameMoveDataPoint);
            _gameData.PlayerDictionary.Add("NewPlayer", _playerGameStats);
            _gameData.PlayerDictionary.Add("NewPlayer2", _playerGameStats);

            _gameDataList = new GameDataList();
            _gameDataList._GameData.Add(_gameData);
            _gameDataList._GameData.Add(_gameData);

            _stringPacketV1 = new PacketV1
                {
                    PacketType = PacketType.c_QueryIfAliasAvailable,
                    Data = "Mobius",
                    Recipients = null,
                    Sender = "*****@*****.**"
                };

            _IBinarySerializablePacketV1 = new PacketV1
            {
                PacketType = PacketType.c_UploadGameData,
                Data = _gameData,
                Recipients = null,
                Sender = "*****@*****.**"
            };

            _packetBase = new PacketBase
                {
                    PacketVersion = PacketVersion.Version1,
                    Data = _stringPacketV1
                };
        }
Example #5
0
        public void AddNewGameData(GameData gameData)
        {
            if (null == gameData)
            {
                Trace.WriteLine(string.Format(
                    "Invalid Game Data in Database.AddNewGameData!\n GameData is null."));

                return;
            }

            var winnerUser = GetUserFromEmailAddress(gameData.Winner);

            if (null == winnerUser)
            {
                Trace.WriteLine(string.Format(
                    "Invalid Game Data in Database.AddNewGameData!\n Winner {0} not recognized.",
                    gameData.Winner));

                return;
            }

            foreach (var kvp in gameData.PlayerDictionary)
            {
                var player = GetUserFromEmailAddress(kvp.Key);

                if (null == player)
                {
                    Trace.WriteLine(string.Format(
                        "Invalid Game Data in Database.AddNewGameData!\n Player {0} not recognized.",
                        kvp.Key));

                    return;
                }
            }

            if (gameData.GameDuration < 0)
            {
                Trace.WriteLine(string.Format(
                    "Invalid Game Data in Database.AddNewGameData!\n GameDuration of value {0} is invalid.",
                    gameData.GameDuration));

                return;
            }

            using (var connection = new SqlConnection(ConnectionString))
            {
                using (var db = new OzwegoDataClassesDataContext(connection))
                {

                    var newData = new game
                        {
                            winner = winnerUser.ID,
                            gameStartTime = gameData.GameStartTime,
                            gameDuration = gameData.GameDuration
                        };

                    // ToDo: newData.gameDataFile = ??

                    db.games.InsertOnSubmit(newData);

                    try
                    {
                        db.SubmitChanges();
                    }
                    catch (Exception e)
                    {
                        Trace.WriteLine(string.Format(
                                "Exception in Database.AddNewGameData!\n Exception: {0} \n Callstack: {1}",
                                e.Message,
                                e.StackTrace));
                    }

                    var gameInstance = GetGameID(GetUserFromEmailAddress(gameData.Winner).ID, gameData.GameStartTime);

                    if (gameInstance == null)
                    {
                        return;
                    }

                    foreach (var kvp in gameData.PlayerDictionary)
                    {
                        var userGame = new user_game();
                        userGame.avgTimeBetweenDumps = kvp.Value.AvgTimeBetweenDumps;
                        userGame.avgTimeBetweenPeels = kvp.Value.AvgTimeBetweenPeels;
                        userGame.isWinner = kvp.Value.IsWinner;
                        userGame.numberOfDumps = kvp.Value.NumberOfDumps;
                        userGame.numberOfPeels = kvp.Value.NumberOfPeels;
                        userGame.performedFirstPeel = kvp.Value.PerformedFirstPeel;
                        userGame.userID = GetUserFromEmailAddress(kvp.Key).ID;
                        userGame.gameID = gameInstance.gameID;

                        db.user_games.InsertOnSubmit(userGame);
                    }

                    try
                    {
                        db.SubmitChanges();
                    }
                    catch (Exception e)
                    {
                        Trace.WriteLine(string.Format(
                                "Exception in Database.AddNewGameData!\n Exception: {0} \n Callstack: {1}",
                                e.Message,
                                e.StackTrace));
                    }
                }
            }
        }
Example #6
0
        /// <summary>
        /// This method is invoked whenever someone (either local or from the server) signals that
        /// they have won the game.
        /// </summary>
        /// <param name="winnerName"></param>
        public async void EndGame(string winnerName)
        {
            if (null == winnerName)
            {
                throw new ArgumentException();
            }

            GameStarted = false;

            _botManager.StopBots();


            //
            // Log the victory event. and then end the logging session.
            //

            var viewModel = GameBoardViewModel.GetInstance();

            _gameDataLogger.LogMove(winnerName, viewModel.GameTime, MoveType.Victory);


            _postGameData = await _gameDataLogger.EndLoggingSession();

            await App.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
            {
                _gameClock.Stop();

                string title = string.Format("{0} has won the game!", winnerName);

                //ToDo: Implement.
                var content = string.Format("Not Implemented");

                var dialog = new MessageDialog(content, title);

                dialog.Commands.Add(new UICommand("Play Again", OnPlayAgainClicked));
                dialog.Commands.Add(new UICommand("Main Menu", OnMainMenuClicked));

                // Set the cancel index (default button behavior) to return the user to the main page.
                dialog.CancelCommandIndex = 1;
                await dialog.ShowAsync();
            });
        }
Example #7
0
        private static GameData CreateTestDataSet()
        {
            var dataSet = new GameData { GameDuration = 50, GameHost = "AGameHost", Winner = "NewPlayer" };

            dataSet.GameMoves.Add(new GameMoveDataPoint("Player", 5, MoveType.Peel));

            var stats = new PlayerGameStats()
            {
                AvgTimeBetweenDumps = 5,
                AvgTimeBetweenPeels = 5,
                NumberOfDumps = 3,
                NumberOfPeels = 3,
                PerformedFirstPeel = true,
                IsWinner = false,
                RawGameData = new List<GameMoveDataPoint>() { new GameMoveDataPoint("Me", 1, MoveType.Peel) }
            };

            dataSet.PlayerDictionary.Add("NewPlayer", stats);
            return dataSet;
        }