/* server -- Klijent.java
 *
 * Klasa se izvrsava u zasebnoj dretvi i obradjuje zaprimljenog klijenta:
 *
 * Klijent trazi datoteku. Ukoliko ona postoji i moze se citati, saljemo mu je,
 * inace saljemo poruku o gresci.
 *
 */

package server;

import java.net.*;
import java.io.*;

public class Klijent implements Runnable {
    private Socket klijent;

    public Klijent() {}

    public Klijent(Socket klijent) {
	this.klijent = klijent;

	System.out.println("Spojio se: "+klijent.getInetAddress());
    }

    public void run() {
	File file = null;
	BufferedReader inFile = null;
	BufferedReader inKlijent = null;
	PrintWriter outKlijent = null;

	try {
	    inKlijent = new BufferedReader(new InputStreamReader(klijent.getInputStream()));
	    outKlijent = new PrintWriter(klijent.getOutputStream(),true /* autoflush */);

	    // Od klijenta ocekujemo samo jednu informaciju: trazeni path
	    String path = inKlijent.readLine();

	    System.out.println(klijent.getInetAddress()+" trazi "+path);
	    
	    file = new File(path);

	    if (!file.exists()) {
		outKlijent.println("Greska: Trazena datoteka ne postoji.");
	    }
	    else if (!file.isFile()) {
		outKlijent.println("Greska: Trazeno nije datoteka.");
	    }
	    else if (!file.canRead()) {
		outKlijent.println("Greska: Trazenu datoteku nije moguce citati.");
	    }
	    else {
		inFile = new BufferedReader(new FileReader(file));
		String linija = null;

		while ((linija=inFile.readLine())!=null) {
		    outKlijent.println(linija);
		}
	    }
	}
	catch (Exception e) {
	    e.printStackTrace();
	}
	finally {
	    if (inFile!=null) {
		try { inFile.close(); }
		catch (IOException e) {}
	    }
	    if (inKlijent!=null) {
		try { inKlijent.close(); }
		catch (IOException e) {}
	    }
	    if (outKlijent!=null) {
		outKlijent.close();
	    }
	    try { klijent.close(); }
	    catch (IOException e) {}
	}
    }
}
