コード例 #1
0
ファイル: CDRManager.cs プロジェクト: hekar/Vaporized
        public static void Update()
        {
            Console.Write( "Updating CDR..." );

            byte[] cdr = GetCdr();
            byte[] cdrHash = GetHash( cdr );

            foreach ( var configServer in ServerCache.ConfigServers )
            {
                try
                {
                    ConfigServerClient csClient = new ConfigServerClient();
                    csClient.Connect( configServer );

                    byte[] tempCdr = csClient.GetContentDescriptionRecord( cdrHash );

                    if ( tempCdr == null )
                        continue;

                    if ( tempCdr.Length == 0 )
                        break;

                    cdr = tempCdr;
                    File.WriteAllBytes( BLOB_FILENAME, tempCdr );

                    break;
                }
                catch ( Exception )
                {
                    Console.WriteLine( "Warning: Unable to download CDR from config server {0}", configServer );
                }
            }

            if ( cdr == null )
            {
                Console.WriteLine( "Error: Unable to download CDR!" );
                return;
            }


            using ( var reader = BlobTypedReader<CDR>.Create( new MemoryStream( cdr ) ) )
            {
                reader.Process();

                cdrObj = reader.Target;
            }

            Console.WriteLine( " Done!" );
        }
コード例 #2
0
        public static void Update()
        {
            typeof(CDRManager).Info("Updating CDR...");

            CDRConfig.Settings config = CDRConfig.Instance;

            string filename = ConfigurationManager.AppSettings["cdrFilename"] ?? CDR_FILENAME;
            filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filename);

            string directory = Path.GetDirectoryName(filename);
            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            var hasCachedCDR = File.Exists(filename);

            if (DateTime.Now > config.CDRCacheTime || !hasCachedCDR)
            {
                byte[] cdrHash = hasCachedCDR ? config.CDRHash : null;

                foreach (var configServer in config.ConfigServers)
                {
                    try
                    {
                        ConfigServerClient csClient = new ConfigServerClient();
                        csClient.Connect(configServer);

                        byte[] tempCdr = csClient.GetContentDescriptionRecord(cdrHash);

                        if (tempCdr == null)
                            continue;

                        if (tempCdr.Length == 0)
                            break;

                        using (MemoryStream ms = new MemoryStream(tempCdr))
                        using (BlobReader reader = BlobReader.CreateFrom(ms))
                            cdrObj = (CDR)BlobTypedReader.Deserialize(reader, typeof(CDR));

                        using (FileStream fs = File.Open(filename, FileMode.Create))
                        using (DeflateStream ds = new DeflateStream(fs, CompressionMode.Compress))
                            ProtoBuf.Serializer.Serialize<CDR>(ds, cdrObj);

                        using (SHA1Managed sha = new SHA1Managed())
                        {
                            config.CDRHash = sha.ComputeHash(tempCdr);
                        }
                        config.CDRCacheTime = DateTime.Now.AddMinutes(30);
                        CDRConfig.Save();
                        break;
                    }
                    catch (Exception ex)
                    {
                        typeof(CDRManager).Error(ex, string.Format("Warning: Unable to download CDR from config server {0}", configServer));
                    }
                }

                if (cdrObj != null)
                {
                    typeof(CDRManager).Info("Done");
                }
                else if (!File.Exists(filename))
                {
                    typeof(CDRManager).Error("Unable to download CDR");
                }
            }
            else
            {
                typeof(CDRManager).Info("Load cached copy");
                using (FileStream fs = File.Open(filename, FileMode.Open))
                using (DeflateStream ds = new DeflateStream(fs, CompressionMode.Decompress))
                    cdrObj = ProtoBuf.Serializer.Deserialize<CDR>(ds);

                typeof(CDRManager).Info("Done");
            }
        }
コード例 #3
0
ファイル: CDRManager.cs プロジェクト: Nephyrin/SteamKit
        public static void Update()
        {
            Console.Write( "Updating CDR..." );

            var hasCachedCDR = File.Exists(CDR_FILENAME);

            if (DateTime.Now > ConfigCache.Instance.CDRCacheTime || !hasCachedCDR)
            {
                byte[] cdrHash = hasCachedCDR ? ConfigCache.Instance.CDRHash : null;

                foreach (var configServer in ServerCache.ConfigServers)
                {
                    try
                    {
                        ConfigServerClient csClient = new ConfigServerClient();
                        csClient.Connect(configServer);

                        byte[] tempCdr = csClient.GetContentDescriptionRecord(cdrHash);

                        if (tempCdr == null)
                            continue;

                        if (tempCdr.Length == 0)
                            break;

                        using (MemoryStream ms = new MemoryStream(tempCdr))
                        using (BlobReader reader = BlobReader.CreateFrom(ms))
                            cdrObj = (CDR)BlobTypedReader.Deserialize(reader, typeof(CDR));

                        using (FileStream fs = File.Open(CDR_FILENAME, FileMode.Create))
                        using (DeflateStream ds = new DeflateStream(fs, CompressionMode.Compress))
                            ProtoBuf.Serializer.Serialize<CDR>(ds, cdrObj);

                        ConfigCache.Instance.CDRHash = SHAHash(tempCdr);
                        ConfigCache.Instance.CDRCacheTime = DateTime.Now.AddMinutes(30);
                        ConfigCache.Instance.Save(ConfigCache.CONFIG_FILENAME);
                        break;
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Warning: Unable to download CDR from config server {0}: {1}", configServer, e.Message);
                    }
                }

                if(cdrObj != null)
                {
                    Console.WriteLine(" Done!");
                    return;
                }
                else if (!File.Exists(CDR_FILENAME))
                {
                    Console.WriteLine("Error: Unable to download CDR!");
                    return;
                }
            }

            using (FileStream fs = File.Open(CDR_FILENAME, FileMode.Open))
            using (DeflateStream ds = new DeflateStream(fs, CompressionMode.Decompress))
                cdrObj = ProtoBuf.Serializer.Deserialize<CDR>(ds);

            Console.WriteLine(" Done!");
        }