public static user_st work(user_st user) { Random r = new Random(user.jumprange + (int)user.lastjump.Ticks); DateTime timetogglestart = DateTime.Now; while (jumptoggle?user.jumpnum != maxjumpnum:timetogglestart.AddMinutes(totalminutes) > DateTime.Now) { if (user.lastjump.Add(user.next_query_time) < DateTime.Now) { //Adjust position if (r.Next(0, 3) > 1) { user.x = user.x + user.jumprange; } else { user.x = user.x - user.jumprange; } if (r.Next(0, 3) > 1) { user.z = user.z + user.jumprange; } else { user.z = user.z - user.jumprange; } user.lastjump = DateTime.Now; //create location for mathmatics star_st curr = new star_st(); curr.coord.x = user.x; curr.coord.y = user.y; curr.coord.z = user.z; //query history_st next = new history_st(); next.radius = queryRadius[user.query]; DateTime start = DateTime.Now; next.query = "SELECT * FROM systems WHERE " + "systems.x BETWEEN " + (user.x - queryRadius[user.query]) + " AND " + (user.x + queryRadius[user.query]) + " AND " + "systems.y BETWEEN " + (user.y - queryRadius[user.query]) + " AND " + (user.y + queryRadius[user.query]) + " AND " + "systems.z BETWEEN " + (user.z - queryRadius[user.query]) + " AND " + (user.z + queryRadius[user.query] + " AND deleted_at is NULL;"); try { NpgsqlConnection conn = new NpgsqlConnection("Pooling=false; SERVER=cyberlord.de; Port=5432; Database=edmc_rse_db; User ID=edmc_rse_user; Password=asdfplkjiouw3875948zksmdxnf;Timeout=12;Application Name=stresstest-" + user.name); conn.Open(); NpgsqlTransaction tran = conn.BeginTransaction(); NpgsqlCommand command = new NpgsqlCommand(next.query, conn); NpgsqlDataReader read = command.ExecuteReader(); while (read.Read()) { check_st ret = new check_st(); ret.star.name = read["name"].ToString(); ret.star.coord.x = Double.Parse(read["x"].ToString(), CultureInfo.InvariantCulture); ret.star.coord.y = Double.Parse(read["y"].ToString(), CultureInfo.InvariantCulture); ret.star.coord.z = Double.Parse(read["z"].ToString(), CultureInfo.InvariantCulture); ret.dist = ret.star.distance(curr); next.resultnum++; } //cleanup, prep next jump conn.Close(); next.error_bool = false; } catch (Exception e) { next.resultnum = -1; next.error_bool = true; next.error_string = e.Message; } next.time = DateTime.Now - start; next.jumpnum = user.jumpnum; user.history.Add(next); if (user.history[user.jumpnum].resultnum < 15 && user.query < 10) { user.query++; } else if (user.history[user.jumpnum].resultnum > 100 && user.query > 0) { user.query--; } user.jumpnum++; } else { Thread.Sleep(((user.lastjump.Add(user.next_query_time) - DateTime.Now).TotalSeconds > new TimeSpan(0, 0, 2).TotalSeconds ? (user.lastjump.Add(user.next_query_time) - DateTime.Now) : new TimeSpan(1))); } } return(user); }
public star_st findnext(star_st curr, star_st dest, int variation = 20, int min_dist = 0) { fstrun(); div_st div = new div_st(); div_st dir = new div_st(); div.x = dest.coord.x - curr.coord.x; div.y = dest.coord.y - curr.coord.y; div.z = dest.coord.z - curr.coord.z; dir.x = div.x >= 0 ? 1 : -1; dir.y = div.y >= 0 ? 1 : -1; dir.z = div.z >= 0 ? 1 : -1; double dist = curr.distance(dest); double jumps = dist / 1000; if (dist < min_dist) { return(dest); } coord_block_st query = new coord_block_st(); query.x_start = curr.coord.x + (div.x / jumps) + (dir.x * min_dist / 3) - 1000; query.x_end = curr.coord.x + (div.x / jumps) + (dir.x * min_dist / 3) + 1000; query.y_start = curr.coord.y + (div.y / jumps) - 200; query.y_end = curr.coord.y + (div.y / jumps) + 200; query.z_start = curr.coord.z + (div.z / jumps) + (dir.z * min_dist / 3) - 1000; query.z_end = curr.coord.z + (div.z / jumps) + (dir.z * min_dist / 3) + 1000; conn.Open(); string sql = "SELECT name, x, y, z FROM systems where x BETWEEN " + query.x_start.ToString(CultureInfo.InvariantCulture) + " and " + query.x_end.ToString(CultureInfo.InvariantCulture) + " and y BETWEEN " + query.y_start.ToString(CultureInfo.InvariantCulture) + " and " + query.y_end.ToString(CultureInfo.InvariantCulture) + " and z BETWEEN " + query.z_start.ToString(CultureInfo.InvariantCulture) + " and " + query.z_end.ToString(CultureInfo.InvariantCulture) + " and action_todo = 1 and deleted_at is NULL;"; NpgsqlCommand command = new NpgsqlCommand(sql, conn); NpgsqlDataReader read = command.ExecuteReader(); List <check_st> collect = new List <check_st>(); while (read.Read()) { check_st ret = new check_st(); ret.star.name = read["name"].ToString(); ret.star.coord.x = Double.Parse(read["x"].ToString(), CultureInfo.InvariantCulture); ret.star.coord.y = Double.Parse(read["y"].ToString(), CultureInfo.InvariantCulture); ret.star.coord.z = Double.Parse(read["z"].ToString(), CultureInfo.InvariantCulture); ret.dist = ret.star.distance(curr); ret.angle = curr.angle(ret.star, dest); collect.Add(ret); } conn.Close(); check_st temp = new check_st(); temp.star = dest; temp.dist = dist; temp.angle = 0; collect.Add(temp); collect.Sort(); for (int x = 0; x != collect.Count; x++) { if (collect[x].angle < variation)// || (collect[x].dist == 0 && collect[x].star.name != curr.name)) { if (collect[x].dist > min_dist) { //if (checkstar(collect[x].star)) return(collect[x].star); } } } return(dest);//This will never be reached, but just in case }
public star_st findnext(star_st curr, star_st dest, int variation = 20, int min_dist = 0) { fstrun(); double dist = curr.distance(dest); double dev = dist / 3; coord_block_st query = new coord_block_st(); query.x_start = curr.coord.x > dest.coord.x ? dest.coord.x - dev : curr.coord.x - dev; query.x_end = curr.coord.x < dest.coord.x ? dest.coord.x + dev : curr.coord.x + dev; query.y_start = curr.coord.y > dest.coord.y ? dest.coord.y - dev : curr.coord.y - dev; query.y_end = curr.coord.y < dest.coord.y ? dest.coord.y + dev : curr.coord.y + dev; query.z_start = curr.coord.z > dest.coord.z ? dest.coord.z - dev : curr.coord.z - dev; query.z_end = curr.coord.z < dest.coord.z ? dest.coord.z + dev : curr.coord.z + dev; conn.Open(); string sql = "SELECT name, x, y, z FROM systems where x BETWEEN " + query.x_start.ToString(CultureInfo.InvariantCulture) + " and " + query.x_end.ToString(CultureInfo.InvariantCulture) + " and y BETWEEN " + query.y_start.ToString(CultureInfo.InvariantCulture) + " and " + query.y_end.ToString(CultureInfo.InvariantCulture) + " and z BETWEEN " + query.z_start.ToString(CultureInfo.InvariantCulture) + " and " + query.z_end.ToString(CultureInfo.InvariantCulture) + " and action_todo = 1 and deleted_at is NULL;"; //Console.WriteLine(curr.name + "|" + curr.coord.x+"|" + curr.coord.y+ "|" + curr.coord.z); //Console.WriteLine(dest.name + "|" + dest.coord.x + "|" + dest.coord.y + "|" + dest.coord.z); //Console.WriteLine(variation); //Console.WriteLine(min_dist); //Console.WriteLine(sql); NpgsqlTransaction tran = conn.BeginTransaction(); NpgsqlCommand command = new NpgsqlCommand(sql, conn); NpgsqlDataReader read = command.ExecuteReader(); List <check_st> collect = new List <check_st>(); while (read.Read()) { check_st ret = new check_st(); ret.star.name = read["name"].ToString(); ret.star.coord.x = Double.Parse(read["x"].ToString(), CultureInfo.InvariantCulture); ret.star.coord.y = Double.Parse(read["y"].ToString(), CultureInfo.InvariantCulture); ret.star.coord.z = Double.Parse(read["z"].ToString(), CultureInfo.InvariantCulture); ret.dist = ret.star.distance(curr); ret.angle = curr.angle(ret.star, dest); collect.Add(ret); } conn.Close(); check_st temp = new check_st(); temp.star = dest; temp.dist = dist; temp.angle = 0; collect.Add(temp); collect.Sort(); for (int x = 0; x != collect.Count; x++) { if (collect[x].angle < variation)// || (collect[x].dist == 0 && collect[x].star.name != curr.name)) { if (collect[x].dist > min_dist) { //if (checkstar(collect[x].star)) return(collect[x].star); } } } return(dest);//This will never be reached, but just in case }