Fixed same random number generation on different bots and runners.

This commit is contained in:
ruri
2019-09-06 14:41:45 +02:00
parent 562a31fb2b
commit 22f1adbf17
10 changed files with 28 additions and 21 deletions
+10 -10
View File
@@ -617,7 +617,7 @@ namespace RuriLib
break;
case Function.RandomNum:
outputString = (data.rand.Next(randomMin, randomMax)).ToString();
outputString = (data.Random.Next(randomMin, randomMax)).ToString();
break;
case Function.RandomString:
@@ -634,21 +634,21 @@ namespace RuriLib
outputString = localInputString;
while (reserved.Any(r => outputString.Contains(r))){
if (outputString.Contains("?l"))
outputString = ReplaceFirst(outputString, "?l", lowercase[data.rand.Next(0, lowercase.Length)].ToString());
outputString = ReplaceFirst(outputString, "?l", lowercase[data.Random.Next(0, lowercase.Length)].ToString());
else if (outputString.Contains("?u"))
outputString = ReplaceFirst(outputString, "?u", uppercase[data.rand.Next(0, uppercase.Length)].ToString());
outputString = ReplaceFirst(outputString, "?u", uppercase[data.Random.Next(0, uppercase.Length)].ToString());
else if (outputString.Contains("?d"))
outputString = ReplaceFirst(outputString, "?d", digits[data.rand.Next(0, digits.Length)].ToString());
outputString = ReplaceFirst(outputString, "?d", digits[data.Random.Next(0, digits.Length)].ToString());
else if (outputString.Contains("?s"))
outputString = ReplaceFirst(outputString, "?s", symbols[data.rand.Next(0, symbols.Length)].ToString());
outputString = ReplaceFirst(outputString, "?s", symbols[data.Random.Next(0, symbols.Length)].ToString());
else if (outputString.Contains("?h"))
outputString = ReplaceFirst(outputString, "?h", hex[data.rand.Next(0, hex.Length)].ToString());
outputString = ReplaceFirst(outputString, "?h", hex[data.Random.Next(0, hex.Length)].ToString());
else if (outputString.Contains("?a"))
outputString = ReplaceFirst(outputString, "?a", allchars[data.rand.Next(0, allchars.Length)].ToString());
outputString = ReplaceFirst(outputString, "?a", allchars[data.Random.Next(0, allchars.Length)].ToString());
else if (outputString.Contains("?m"))
outputString = ReplaceFirst(outputString, "?m", udchars[data.rand.Next(0, udchars.Length)].ToString());
outputString = ReplaceFirst(outputString, "?m", udchars[data.Random.Next(0, udchars.Length)].ToString());
else if (outputString.Contains("?i"))
outputString = ReplaceFirst(outputString, "?i", ludchars[data.rand.Next(0, ludchars.Length)].ToString());
outputString = ReplaceFirst(outputString, "?i", ludchars[data.Random.Next(0, ludchars.Length)].ToString());
}
break;
@@ -711,7 +711,7 @@ namespace RuriLib
break;
case Function.GetRandomUA:
outputString = RandomUserAgent(data.rand);
outputString = RandomUserAgent(data.Random);
break;
case Function.AESEncrypt:
+1 -1
View File
@@ -408,7 +408,7 @@ namespace RuriLib
if (encodeContent)
{
// Very dirty but it works
var nonce = data.rand.Next(1000000, 9999999);
var nonce = data.Random.Next(1000000, 9999999);
pData = pData.Replace("&", $"{nonce}&{nonce}").Replace("=", $"{nonce}={nonce}");
pData = System.Uri.EscapeDataString(pData).Replace($"{nonce}%26{nonce}", "&").Replace($"{nonce}%3D{nonce}", "=");
}
+1 -1
View File
@@ -497,7 +497,7 @@ namespace RuriLib
break;
case ListAction.Random:
data.Variables.Set(new CVar(variableName, list[data.rand.Next(list.Count)], isCapture));
data.Variables.Set(new CVar(variableName, list[data.Random.Next(list.Count)], isCapture));
break;
default:
+2 -2
View File
@@ -321,7 +321,7 @@ namespace RuriLib
.Select(ext => Directory.GetCurrentDirectory() + "\\ChromeExtensions\\" + ext));
if (data.ConfigSettings.DisableNotifications) chromeop.AddArgument("--disable-notifications");
if (data.ConfigSettings.CustomCMDArgs != "") chromeop.AddArgument(data.ConfigSettings.CustomCMDArgs);
if (data.ConfigSettings.RandomUA) chromeop.AddArgument("--user-agent=" + BlockFunction.RandomUserAgent(data.rand));
if (data.ConfigSettings.RandomUA) chromeop.AddArgument("--user-agent=" + BlockFunction.RandomUserAgent(data.Random));
else if (data.ConfigSettings.CustomUserAgent != "") chromeop.AddArgument("--user-agent=" + data.ConfigSettings.CustomUserAgent);
if (data.UseProxies) chromeop.AddArgument("--proxy-server=" + data.Proxy.Type.ToString().ToLower() + "://" + data.Proxy.Proxy);
@@ -346,7 +346,7 @@ namespace RuriLib
if (data.GlobalSettings.Selenium.Headless || data.ConfigSettings.ForceHeadless) fireop.AddArgument("--headless");
if (data.ConfigSettings.DisableNotifications) fireprofile.SetPreference("dom.webnotifications.enabled", false);
if (data.ConfigSettings.CustomCMDArgs != "") fireop.AddArgument(data.ConfigSettings.CustomCMDArgs);
if (data.ConfigSettings.RandomUA) fireprofile.SetPreference("general.useragent.override", BlockFunction.RandomUserAgent(data.rand));
if (data.ConfigSettings.RandomUA) fireprofile.SetPreference("general.useragent.override", BlockFunction.RandomUserAgent(data.Random));
else if (data.ConfigSettings.CustomUserAgent != "") fireprofile.SetPreference("general.useragent.override", data.ConfigSettings.CustomUserAgent);
if (data.UseProxies)
+4 -2
View File
@@ -43,7 +43,7 @@ namespace RuriLib
public class BotData
{
/// <summary>A random number generator that methods can refer to, in order to avoid the generation of the same random number if executed in rapid succession.</summary>
public Random rand = new Random();
public Random Random = new Random();
/// <summary>The Status of the Bot.</summary>
public BotStatus Status { get; set; }
@@ -160,13 +160,15 @@ namespace RuriLib
/// <param name="data">The wrapped data line to check</param>
/// <param name="proxy">The proxy to use (set to null if none)</param>
/// <param name="useProxies">Whether to use the proxy for requests</param>
/// <param name="random">A reference to the global random generator</param>
/// <param name="botNumber">The number of the bot that is creating this object</param>
/// <param name="isDebug">Whether this object is created from a Debugger or from a Runner</param>
public BotData(RLSettingsViewModel globalSettings, ConfigSettings configSettings, CData data, CProxy proxy, bool useProxies, int botNumber = 0, bool isDebug = true)
public BotData(RLSettingsViewModel globalSettings, ConfigSettings configSettings, CData data, CProxy proxy, bool useProxies, Random random, int botNumber = 0, bool isDebug = true)
{
Data = data;
Proxy = proxy;
UseProxies = useProxies;
Random = random;
Status = BotStatus.NONE;
BotNumber = BotNumber;
GlobalSettings = globalSettings;
+5 -2
View File
@@ -40,10 +40,12 @@ namespace RuriLib.Runner
/// </summary>
/// <param name="environment">The environment settings</param>
/// <param name="settings">The RuriLib settings</param>
public RunnerViewModel(EnvironmentSettings environment, RLSettingsViewModel settings)
/// <param name="random">A reference to the global random generator</param>
public RunnerViewModel(EnvironmentSettings environment, RLSettingsViewModel settings, Random random)
{
Env = environment;
Settings = settings;
Random = random;
OnPropertyChanged("Busy");
OnPropertyChanged("ControlsEnabled");
}
@@ -52,6 +54,7 @@ namespace RuriLib.Runner
#region Settings
private RLSettingsViewModel Settings { get; set; }
private EnvironmentSettings Env { get; set; }
private Random Random { get; set; }
#endregion
#region Workers
@@ -666,7 +669,7 @@ namespace RuriLib.Runner
}
// Initialize the Bot Data
BotData botData = new BotData(Settings, Config.Settings, currentData, currentProxy, UseProxies, bot.Id, false);
BotData botData = new BotData(Settings, Config.Settings, currentData, currentProxy, UseProxies, Random, bot.Id, false);
botData.Driver = bot.Driver;
botData.BrowserOpen = bot.IsDriverOpen;
List<LogEntry> BotLog = new List<LogEntry>();