Exemple #1
0
        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;
            }
        }