private List <double> GetCardPrices(SSGame game, out int cardsCount) { string url = baseUrl.Replace("*gameID*", game.Link.Split(new[] { "app/" }, StringSplitOptions.None)[1].Split('/')[0]); List <double> cards = new List <double>(); using (var client = new WebClient()) { var html = client.DownloadString(url); var document = new HtmlDocument(); document.LoadHtml(html); var cardNodes = document.DocumentNode.SelectNodes(@"//div[@id = 'searchResults']/div[@id = 'searchResultsTable']/div[@id = 'searchResultsRows']/a[@class = 'market_listing_row_link']"); foreach (var node in cardNodes) { var price = node.SelectSingleNode(@"div[1]/div[1]/div[2]/span[1]/span[1]").InnerText; price = price.Split(new[] { " " }, StringSplitOptions.None)[0].Remove(0, 1).Replace('.', ','); cards.Add(double.Parse(price) * OneUSDinRUB); } cardsCount = int.Parse(document.DocumentNode.SelectSingleNode(@"//div[@id = 'searchResults_ctn']/div[2]/span[@id = 'searchResults_total']").InnerText); } return(cards); }
private Dictionary <string, SSGame> SteamShopParse(double maxPrice) { var url = baseUrl; Dictionary <string, SSGame> games = new Dictionary <string, SSGame>(); using (var client = new WebClient()) { double currPrice = 0; do { var html = client.DownloadString(url); var document = new HtmlDocument(); document.LoadHtml(html); var gameNodes = document.DocumentNode.SelectNodes(@"//div[@id = 'search_results']/div[@id = 'search_result_container']/div[2]/a"); if (gameNodes == null) { continue; } foreach (var node in gameNodes) { var title = node.SelectSingleNode(@"div[2]/div[1]/span[@class = 'title']").InnerText; var price = node.SelectSingleNode(@"div[2]/div[4]/div[2]").InnerText; var href = node.GetAttributeValue(@"href", "error"); if (!price.Contains('.')) { continue; } var arr = price.Split(new[] { "pСѓР±." }, StringSplitOptions.None); //разбиение по подстроке "руб." price = (arr.Count() > 2) ? arr[1] : arr[0]; var game = new SSGame() { Title = title, Price = double.Parse(price), Link = href }; currPrice = game.Price; try { games.Add(game.Title, game); } catch (ArgumentException) { continue; } } var nextPageButtons = document.DocumentNode.SelectNodes(@"//div[@class = 'search_pagination_right']/a[@class = 'pagebtn']"); foreach (var button in nextPageButtons) { if (button.InnerText == ">") //знак > { url = button.GetAttributeValue(@"href", "error"); } else { url = "end"; } } } while (currPrice <= maxPrice && url != "end"); } return(games); }
static void Main(string[] args) { Globals.Server = true; Globals.ListenServer = true; const int serverPort = 51010; if (Globals.Server && !Globals.ListenServer) // Launch dedicated server { throw new NotImplementedException("Dedicated server mode not supported yet."); } //else if (Globals.Server && Globals.ListenServer) // Launch listen server //{ // using (var game = new SSGame(true)) // { // game.Run(); // } //} else // Launch client { using (var game = new SSGame()) { game.Run(); } } //var server = new NetworkServer(serverPort); // //server.AddIncomingMessageHandler<HailRequest>(Intent.Hail, (connection, hailRequest) => // { // Console.WriteLine("[SERVER] " + hailRequest.Name + " approved to join."); // connection.Approve(new HailResponse(true, hailRequest.Name)); // }); //server.AddIncomingMessageHandler<ConnectionStatusChanged>(Intent.StatusChanged, (connection, message) => // { // Console.WriteLine("[SERVER] New status for client: " + message.NewStatus + " (" + message.Reason + ")"); // }); // //server.AddIncomingMessageHandler<TestMessage>(Intent.TestMessage, (connection, message) => // { // TestMessageHandler(connection, message); // server.SendMessage(connection, Intent.TestMessage, new TestMessage(10, false, 'f', "char is f", new Vector2(20.50235f, 30.4568f), 5030, "a", "bcd")); // }); // //server.Start(); // //new Thread(() => //{ // while (server.netServer.Status == NetPeerStatus.Running) // { // server.Poll(); // Thread.Sleep(33); // } //}).Start(); // //var client = new NetworkClient(); // //client.AddIncomingMessageHandler<ConnectionStatusChanged>(Intent.StatusChanged, (connection, message) => // { // Console.WriteLine("[CLIENT] New status: " + message.NewStatus); // if (message.NewStatus == NetConnectionStatus.Connected) // { // Console.WriteLine("[CLIENT] HailResponse received: CanJoin = " + message.HailResponse.CanJoin); // if (message.HailResponse.CanJoin) // Console.WriteLine("\t[CLIENT] My name is " + message.HailResponse.Name + "."); // // client.SendMessage(Intent.TestMessage, new TestMessage(100, true, 'G', "The char is G", Vector2.One, long.MaxValue, "hello", "world")); // } // }); //client.AddIncomingMessageHandler<TestMessage>(Intent.TestMessage, TestMessageHandler); // //client.Connect("localhost", 51010, new HailRequest("Skippy")); // //new Thread(() => //{ // while (client.netClient.Status == NetPeerStatus.Running) // { // client.Poll(); // Thread.Sleep(1); // } //}).Start(); // //while (true) //{ // Thread.Sleep(100); //} }