예제 #1
0
        // public string ArchiveGroup { get; private set; }
        // public string[] PatchArchives { get; private set; }
        // public string PatchArchiveGroup { get; private set; }

        public ContentConfiguration(CDNs.Record hostInfo, byte[] contentHash)
        {
            using (var asyncClient = new AsyncClient(hostInfo.Hosts[0]))
            {
                var queryString =
                    $"/{hostInfo.Path}/config/{contentHash[0]:x2}/{contentHash[1]:x2}/{contentHash.ToHexString()}";

                asyncClient.Send(queryString);

                using (var textReader = new StreamReader(asyncClient.Stream))
                {
                    var line = textReader.ReadLine();
                    if (line != "# CDN Configuration")
                    {
                        return;
                    }

                    var elementList    = new List <string>();
                    var currentElement = string.Empty;

                    while ((line = textReader.ReadLine()) != null)
                    {
                        if (string.IsNullOrEmpty(line))
                        {
                            continue;
                        }

                        var lineTokens  = line.Split(new[] { '=', ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        var isIndexLine = line.Contains('=');
                        if (isIndexLine)
                        {
                            if (!string.IsNullOrEmpty(currentElement) && elementList.Count != 0)
                            {
                                StoreElement(currentElement, elementList);
                            }

                            currentElement = lineTokens[0];
                            elementList.Clear();
                        }

                        elementList.AddRange(isIndexLine ? lineTokens.Skip(1) : lineTokens);
                    }
                }
            }
        }
예제 #2
0
        // public int[] EncodingSize { get; }
        // public byte[] Patch { get; set; }
        // public int PatchSize { get; set; }
        // public byte[] PatchConfig { get; set; }

        public BuildConfiguration(CDNs.Record hostInfo, byte[] buildHash)
        {
            using (var asyncClient = new AsyncClient(hostInfo.Hosts[0]))
            {
                var queryString =
                    $"/{hostInfo.Path}/config/{buildHash[0]:x2}/{buildHash[1]:x2}/{buildHash.ToHexString()}";

                asyncClient.Send(queryString);

                using (var textReader = new StreamReader(asyncClient.Stream))
                {
                    var line = textReader.ReadLine();
                    if (line != "# Build Configuration")
                    {
                        return;
                    }

                    while ((line = textReader.ReadLine()) != null)
                    {
                        if (string.IsNullOrEmpty(line))
                        {
                            continue;
                        }

                        var lineTokens = line.Split('=').Select(l => l.Trim()).ToArray();
                        if (lineTokens.Length != 2)
                        {
                            continue;
                        }

                        // ReSharper disable once SwitchStatementMissingSomeCases
                        switch (lineTokens[0])
                        {
                        case "root":
                            Root = lineTokens[1].ToByteArray();
                            break;

                        case "install":
                        {
                            Install = new byte[2][];
                            var installTokens = lineTokens[1].Split(' ');
                            Install[0] = installTokens[0].ToByteArray();
                            Install[1] = installTokens[1].ToByteArray();
                            break;
                        }

                        // case "install-size":
                        //     InstallSize = int.Parse(lineTokens[1]);
                        //     break;
                        // case "download":
                        //     Download = lineTokens[1].ToByteArray();
                        //     break;
                        // case "download-size":
                        //     DownloadSize = int.Parse(lineTokens[1]);
                        //     break;
                        // case "partial-priority":
                        //     PartialPriority = lineTokens[1].ToByteArray();
                        //     break;
                        // case "partial-priority-size":
                        //     PartialPrioritySize = int.Parse(lineTokens[1]);
                        //     break;
                        case "encoding":
                        {
                            Encoding = new byte[2][];
                            var encodingTokens = lineTokens[1].Split(' ');
                            Encoding[0] = encodingTokens[0].ToByteArray();
                            Encoding[1] = encodingTokens[1].ToByteArray();
                            break;
                        }
                            // case "encoding-size":
                            // {
                            //     EncodingSize = new int[2];
                            //     var encodingTokens = lineTokens[1].Split(' ');
                            //     EncodingSize[0] = int.Parse(encodingTokens[0]);
                            //     EncodingSize[1] = int.Parse(encodingTokens[1]);
                            //     break;
                            // }
                            // case "patch":
                            //     Patch = lineTokens[1].ToByteArray();
                            //     break;
                            // case "patch-size":
                            //     PatchSize = int.Parse(lineTokens[1]);
                            //     break;
                            // case "patch-config":
                            //     PatchConfig = lineTokens[1].ToByteArray();
                            //     break;
                        }
                    }
                }
            }
        }