public int SaveGameData(string gameData, bool isCompressedAndBase64Encoded, out string message) { try { Data.GameDataset gameDataset = new Data.GameDataset(); //gameDataset.EnforceConstraints = false; //gameDataset. if (isCompressedAndBase64Encoded == true) { byte[] binaryGameData = Convert.FromBase64String(gameData); MemoryStream memoryStream = new MemoryStream(binaryGameData); ICSharpCode.SharpZipLib.GZip.GZipInputStream zipStream = new ICSharpCode.SharpZipLib.GZip.GZipInputStream(memoryStream); StreamReader streamReader = new StreamReader(zipStream, System.Text.Encoding.Unicode); //string gameDataXml = streamReader.ReadToEnd(); gameDataset.ReadXml(streamReader, System.Data.XmlReadMode.IgnoreSchema); } else { //gameDataset.ReadXml(new StringReader(gameData)); gameDataset.ReadXml(new StringReader(gameData), System.Data.XmlReadMode.IgnoreSchema); } if (String.IsNullOrEmpty(Settings.Default.TagLastGameDataXmlFileLogLocation) == false) { File.WriteAllText(Path.Combine(Settings.Default.TagLastGameDataXmlFileLogLocation, Guid.NewGuid().ToString() + ".xml"), gameDataset.GetXml()); } string currentIPAddress; if (OperationContext.Current != null) { //http://nayyeri.net/detect-client-ip-in-wcf-3-5 OperationContext context = OperationContext.Current; MessageProperties messageProperties = context.IncomingMessageProperties; RemoteEndpointMessageProperty endpointProperty = (RemoteEndpointMessageProperty)messageProperties[RemoteEndpointMessageProperty.Name]; currentIPAddress = endpointProperty.Address; } else { currentIPAddress = "127.0.0.1"; // Supports unit tests. } int gameID = 0; using (DataAccess.CSSDataContext db = new DataAccess.CSSDataContext()) { using (DataAccess.CSSStatsDataContext statsDB = new DataAccess.CSSStatsDataContext()) { var gameServer = statsDB.GameServers.FirstOrDefault(p => p.GameServerIPs.Where(r => r.IPAddress == currentIPAddress).Count() > 0); if (gameServer == null) { throw new Exception("You may not upload data from this address: " + currentIPAddress); } try { foreach (Data.GameDataset.GameRow gameRow in gameDataset.Game) { gameID = SaveGame(db, statsDB, gameServer, gameRow); } } catch (Exception ex) { if (String.IsNullOrEmpty(Settings.Default.TagExceptionLogFileName) == false) { File.AppendAllText(Settings.Default.TagExceptionLogFileName, DateTime.Now.ToString() + ": " + ex.ToString() + "\n\n\n"); } throw; } statsDB.SubmitChanges(); db.SubmitChanges(); } } // Update AllegSkill rank. AllegSkill.Calculator.UpdateAllegSkillForGame(gameID); // Update Prestige Rank. using (DataAccess.CSSStatsDataContext statsDB = new DataAccess.CSSStatsDataContext()) { var game = statsDB.Games.FirstOrDefault(p => p.GameIdentID == gameID); if (game == null) { Error.Write(new Exception("Tag.SaveGameData(): Couldn't get game for GameID: " + gameID)); } else { PrestigeRankCalculator psc = new PrestigeRankCalculator(); psc.Calculate(statsDB, game); } } message = "Game saved."; return(gameID); } catch (Exception ex) { message = ex.ToString(); return(-1); } }
public int SaveGameData(string gameData, bool isCompressedAndBase64Encoded, out string message) { try { Data.GameDataset gameDataset = new Data.GameDataset(); //gameDataset.EnforceConstraints = false; //gameDataset. if (isCompressedAndBase64Encoded == true) { byte[] binaryGameData = Convert.FromBase64String(gameData); MemoryStream memoryStream = new MemoryStream(binaryGameData); ICSharpCode.SharpZipLib.GZip.GZipInputStream zipStream = new ICSharpCode.SharpZipLib.GZip.GZipInputStream(memoryStream); StreamReader streamReader = new StreamReader(zipStream, System.Text.Encoding.Unicode); //string gameDataXml = streamReader.ReadToEnd(); gameDataset.ReadXml(streamReader, System.Data.XmlReadMode.IgnoreSchema); } else { //gameDataset.ReadXml(new StringReader(gameData)); gameDataset.ReadXml(new StringReader(gameData), System.Data.XmlReadMode.IgnoreSchema); } if (String.IsNullOrEmpty(Settings.Default.TagLastGameDataXmlFileLogLocation) == false) File.WriteAllText(Path.Combine(Settings.Default.TagLastGameDataXmlFileLogLocation, Guid.NewGuid().ToString() + ".xml"), gameDataset.GetXml()); string currentIPAddress; if (OperationContext.Current != null) { //http://nayyeri.net/detect-client-ip-in-wcf-3-5 OperationContext context = OperationContext.Current; MessageProperties messageProperties = context.IncomingMessageProperties; RemoteEndpointMessageProperty endpointProperty = (RemoteEndpointMessageProperty)messageProperties[RemoteEndpointMessageProperty.Name]; currentIPAddress = endpointProperty.Address; } else currentIPAddress = "127.0.0.1"; // Supports unit tests. int gameID = 0; using (DataAccess.CSSDataContext db = new DataAccess.CSSDataContext()) { using (DataAccess.CSSStatsDataContext statsDB = new DataAccess.CSSStatsDataContext()) { var gameServer = statsDB.GameServers.FirstOrDefault(p => p.GameServerIPs.Where(r => r.IPAddress == currentIPAddress).Count() > 0); if (gameServer == null) throw new Exception("You may not upload data from this address: " + currentIPAddress); try { foreach (Data.GameDataset.GameRow gameRow in gameDataset.Game) gameID = SaveGame(db, statsDB, gameServer, gameRow); } catch (Exception ex) { if (String.IsNullOrEmpty(Settings.Default.TagExceptionLogFileName) == false) File.AppendAllText(Settings.Default.TagExceptionLogFileName, DateTime.Now.ToString() + ": " + ex.ToString() + "\n\n\n"); throw; } statsDB.SubmitChanges(); db.SubmitChanges(); } } // Update AllegSkill rank. AllegSkill.Calculator.UpdateAllegSkillForGame(gameID); // Update Prestige Rank. using (DataAccess.CSSStatsDataContext statsDB = new DataAccess.CSSStatsDataContext()) { var game = statsDB.Games.FirstOrDefault(p => p.GameIdentID == gameID); if (game == null) { Error.Write(new Exception("Tag.SaveGameData(): Couldn't get game for GameID: " + gameID)); } else { PrestigeRankCalculator psc = new PrestigeRankCalculator(); psc.Calculate(statsDB, game); } } message = "Game saved."; return gameID; } catch (Exception ex) { message = ex.ToString(); return -1; } }