import java.net.*;
import java.io.*;
import java.util.*;
import java.text.*;

public class OrderServer{    
    
  public static void main(String[] args) throws IOException {
    int port = 0;
    try {
      port = Integer.parseInt(args[0]);
      int seed = 1002;
      if (args.length > 2) seed = Integer.parseInt(args[1]);
      ServerSocket serverSocket = null;
       
      boolean listening = true;
      serverSocket = new ServerSocket(port); 
	
      while (listening)
        new OrderServerThread(serverSocket.accept(), seed).start();
      serverSocket.close();
    } catch (IOException e) {
      System.err.println("Could not listen on port: " +port);
    } catch (ArrayIndexOutOfBoundsException e) {
      System.out.println("Usage: java OrderServer <port> [optional seed]");
    }
  }
}

class OrderServerThread extends Thread{
  private Socket socket = null;
  private Random random = null;
  private int antal = 0;
  
  public OrderServerThread(Socket socket, long seed) {
    super("OrderServerThread");
    this.socket = socket;
    this.random = new Random(seed);
  }
  public void run(){
    PrintWriter out;
    BufferedReader in;
    try{
      out = new PrintWriter(socket.getOutputStream(), true);
      in  = new BufferedReader
        (new InputStreamReader
         (socket.getInputStream()));

      boolean forever = true;
      while (forever) {
        int nr = random.nextInt(4) + 3;
        antal += nr;
        out.print(nr);
        out.println(" kycklingbitar");

        
        Date now = new Date();
        SimpleDateFormat df = new SimpleDateFormat("hh:mm:ss");
        System.out.print(df.format(now));
        System.out.print(": ");
        System.out.print(nr);
        System.out.println(" kycklingbitar   totalt " + antal);
        this.sleep(2000);
      }
      out.close();
      in.close();
      socket.close();
      
    }catch (IOException e){
      e.printStackTrace();
    }catch (InterruptedException e){
      e.printStackTrace();
    }
  }
}
