public async Task PlayAsync(EmulatorOptions options, string saveFile) { logger.LogInformation("PlayAsync() started"); await GameSettings(); roundsCount = 0; bananoCollected = 0; bananoMissed = 0; while (true) { await GamePacket(options); File.WriteAllText(saveFile, BananoCollectedTotal.ToString()); roundsCount++; } }
public async Task RunAsync(EmulatorOptions options) { Directory.CreateDirectory("d:/Temp/banano/data"); var saveFile = $"d:/Temp/banano/data/{options.Wallet}.json"; if (File.Exists(saveFile)) { var text = await File.ReadAllTextAsync(saveFile); BananoCollectedTotal = int.Parse(text); logger.LogInformation("Savefile loaded: TotalBananos = " + BananoCollectedTotal); } while (true) { try { await PlayAsync(options, saveFile); break; } catch (RestartNeededException ex) { logger.LogWarning($"RestartNeededException: {ex.Message}"); } catch (Exception ex) when(ex is HttpRequestException) { exceptionsCount++; if (exceptionsCount > 10) { throw; } var delay = exceptionsCount > 5 ? exceptionsCount * 5 : exceptionsCount; logger.LogWarning($"Exception #{exceptionsCount}, delay {delay} sec: {ex.Message}"); await Task.Delay(TimeSpan.FromSeconds(delay)); } } logger.LogInformation("Completed."); }
public async Task GamePacket(EmulatorOptions options) { logger.LogDebug($"Sending /gamepacket (collected {bananoCollected}, missed {bananoMissed})..."); var prms = new Dictionary <string, string> { ["wallet"] = options.Wallet, ["version"] = "4.2", ["collected"] = bananoCollected.ToString(), ["missed"] = bananoMissed.ToString(), ["seed"] = options.Seed, ["os"] = options.OS, }; var timeToWait = 0; using (var req = new HttpRequestMessage(HttpMethod.Post, "/gamepacket")) { req.Content = new FormUrlEncodedContent(prms); using (var resp = await httpClient.SendAsync(req)) { resp.EnsureSuccessStatusCode(); var respText = await resp.Content.ReadAsStringAsync(); logger.LogDebug(respText); var respMsg = JsonConvert.DeserializeObject <ServerResponse>(respText); if (respMsg.Code != 1) { logger.LogError("Response: " + respMsg.Message); logger.LogError("If you need validate recaptcha, here is link:"); logger.LogError($" http://bbdevelopment.website:27000/robochecker&wallet={options.Wallet}"); logger.LogError("Press ENTER to continue..."); Console.ReadLine(); logger.LogDebug("ENTER pressed"); throw new RestartNeededException("Recaptcha :("); } exceptionsCount = 0; BananoCollectedTotal += bananoCollected; var data = respMsg.Block.Text.Split("|"); var arr = data .Take(respMsg.Block.Length) .Select(x => x.Split(",").Select(y => int.Parse(y)).ToArray()) .ToList(); bananoCollected = ComputeBananoCollected(arr); bananoMissed = ComputeBananoMissed(arr); var rndMiss = rand.Next(0, 100); if (rndMiss < 15) { bananoCollected--; bananoMissed++; if (rndMiss < 5) { bananoCollected--; bananoMissed++; } } var rndFail = rand.Next(0, 100); if (BananoCollectedTotal < 30 && rndFail < 75) { var delay = rand.Next(5, 10); logger.LogWarning("Fail (newbie), delay " + delay); await Task.Delay(delay * 1000); throw new RestartNeededException("Fail (newbie)"); } else if (BananoCollectedTotal < 100 && rndFail < 50) { var delay = rand.Next(5, 10); logger.LogWarning("Fail (amateur), delay " + delay); await Task.Delay(delay * 1000); throw new RestartNeededException("Fail (amateur)"); } else if (BananoCollectedTotal < 1000 && rndFail < 20) { var delay = rand.Next(5, 10); logger.LogWarning("Fail (advanced), delay " + delay); await Task.Delay(delay * 1000); throw new RestartNeededException("Fail (advanced)"); } timeToWait = respMsg.Block.Time + (roundsCount == 0 ? 0 : respMsg.Block.Delay - 1); logger.LogInformation($"Total collected: {BananoCollectedTotal}. Next to collect: {bananoCollected}, to miss: {bananoMissed}"); } } while (timeToWait > 0) { await Task.Delay(1000); timeToWait--; Console.Write($"Waiting for {timeToWait}... "); Console.CursorLeft = 0; } Console.WriteLine(" "); // Overwrite "Waiting for..." Console.CursorLeft = 0; }