//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); } }
/// <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; }
/// <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 }; }
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)); } } } }
/// <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(); }); }
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; }