package test.lasttest;

/**
 * @author Stefan Knirsch
 * @version $Id$
 * 
 */
public class Dispatcher extends Thread {
  private LasttestClient parent = null;
  private int max;
  private int turns;
  private int turn_counter;
  private int turn;
  private int time;
  private long sum;
  private int turnnum;

  public Dispatcher(LasttestClient parent, int max, int turns, int time, long sum) {
    this.parent = parent;
    this.max = max;
    this.turns = turns;
    this.time = time;
    this.sum = sum;
    turnnum=0;
  }

  public void run() {    
    this.setPriority(Thread.NORM_PRIORITY + 1);
    System.out.println("Dispatcher wird gestartet...");
    TestThread[] old_reqs = buildRequests(0);
    for (turn_counter = 0; turns == 0 ? true : (turn_counter < turns); turn_counter++) {
      try {
//        LasttestClient.Log.write(("Starte Durchlauf " + turn_counter + "\n").getBytes());
      }
      catch (Exception e) {}

//      System.out.println("Starte Durchlauf " + turn_counter);
      turn = turn_counter;
      if (turns == 0)
        turn_counter--;
      TestThread[] reqs = buildRequests(turn_counter);
      for (int counter = 0; counter < max; counter++) {
        old_reqs[counter].start();
      }
      old_reqs = reqs;
      try {
        Thread.sleep(time);
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
    parent.stop = true;
  }

  public TestThread[] buildRequests(int turnNo) {
    TestThread[] ret = new TestThread[max];
    for (int counter = 0; counter < max; counter++) {
//      turnnum ++;
      ret[counter] = new TestThread(parent, turnNo);
    }
    return ret;
  }
}