Пример #1
0
        public ServerFileInfoResponse GetServerResponse(IPEndPoint ipEndPoint, string hash)
        {
            ServerFileInfoResponse response = new ServerFileInfoResponse();

            List<IPEndPoint> ipList = new List<IPEndPoint>();

            Uri requestUri = new Uri(string.Format("http://{0}:{1}/filename|{2}", ipEndPoint.Address, ipEndPoint.Port, hash));

            HTTPClient client = new HTTPClient();
            string xml = client.DownloadString(requestUri);
            XDocument doc = XDocument.Parse(xml);

            var userlist = from user in doc.Descendants("User") select user;
            foreach (XElement element in userlist)
            {

                if(element.Attribute("IP") != null && element.Attribute("Port") != null)
                {
                    string ipStr = element.Attribute("IP").Value;
                    string portStr = element.Attribute("Port").Value;
                    int port;
                    IPAddress ip;
                    if(int.TryParse(portStr, out port) && IPAddress.TryParse(ipStr, out ip))
                    {
                        IPEndPoint endPoint = new IPEndPoint(ip, port);
                        ipList.Add(endPoint);
                    }

                }
            }

            response.IpList = ipList;

            var fileSize = doc.Descendants("FileSize");
            if(fileSize.Count() != 0 && fileSize.First().Attribute("Size") != null)
            {
                long size;
                string sizeStr = fileSize.First().Attribute("Size").Value;
                if (long.TryParse(sizeStr, out size))
                {
                    response.FileSize = size;
                }
            }

            var blocks = doc.Descendants("Blocks");
            if(blocks.Count() != 0 && blocks.First().Attribute("Number") != null)
            {
                int blockNum;
                string blockNumStr = blocks.First().Attribute("Number").Value;
                if(int.TryParse(blockNumStr, out blockNum))
                {
                    response.BlockNum = blockNum;
                }
            }

            return response;
        }