/*
* La classe Serveur cré 1 instance de cette classe par client qui se connecte. ServeurDialogue gère
* toutes les communications avec son client attitré. Juste après sa création, il se transforme en thread
* pour que les autres instances de ServeurDialogue puissent travailler en même temps.
*/

import java.net.Socket;
import java.net.ServerSocket;
import java.io.DataInputStream;
import java.io.PrintStream;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class ServeurDialogue implements Runnable {

	Socket client;
	BufferedReader depuisClient,clavier;
	PrintStream versClient;
	int somme = 0;
	String login,com;
	

	public ServeurDialogue(Socket client) {
		this.client = client;
		try {
			// creation des flux de/vers le client
			depuisClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
			versClient = new PrintStream(client.getOutputStream());


		} catch (IOException e) {
			System.out.println("Pb dans le ServeurDialogue");
			try { client.close(); } catch (IOException ee) {System.out.println("Pb dans le close()");}
		}
		new Thread(this).start();//on transforme cette instance en thread => appel de la fonction run().
	}

	public void run() {
		try {

			String lue="", test="";
			if (lue.indexOf("-") >0) {
				test=lue.substring(0,lue.indexOf("-"));
			}
			while ( !(test.equals("FIN"))) { //on se met à l'écoute des messages venant du client
				
				
				lue = depuisClient.readLine();
				
				traitementReception(lue); //dès qu'un message arrive on lance traitementReception

			}
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
// 		stop();
	}

	public void traitementReception(String recu){


		if(recu.indexOf(":")>0)//si le message a un format correct
		{
			String entete = recu.substring(0,recu.indexOf(":"));
			String message = recu.substring(recu.indexOf(":")+1);
			String mess="",quit="";
			if(recu.indexOf(">")>0) {
			message = recu.substring(recu.indexOf(":")+1,recu.indexOf(">"));
			quit = (recu.substring(recu.indexOf(">")+1));
			}
			
			if(quit.equals("FIN")) {
				System.out.println(entete+" est parti du chat");
				stop(entete);
			}
			if(entete.equals("login")) {//si le message du client commence par "login"... 
				login = recu.substring(recu.indexOf(":")+1);
// 				Serveur.envoyer("login:" + login);
				System.out.println("-> CONNEXION de <"+login+"> sur le chat");
			} else if(message.equals("message")) { //si le message du client commence par "message"...
// 				Serveur.envoyer("message:" + login + ":" + recu.substring(recu.indexOf(":")+1));
				System.out.println("<" + entete + ">" + recu.substring(recu.indexOf(">")+1));
			}
			else  { 
				System.out.println("Le serveur a recu -> "+recu);
			}
			
		}
		else {

			System.out.println("Le serveur a recu : "+recu);
		}
		
	}

	public void envoyer(String texte) {
		versClient.println(texte);
	}

	public void stop(String login) {
		try {
// 			Serveur.envoyer("general:" + login + " est parti du chat");
			Serveur.retirerClient(this);
			Serveur.stopClient(login);
			client.close();
			System.out.println(login+" est parti du chat");
			
		} catch (IOException e) {
			System.out.println("exception a la fermeture d'une connexion : "+e);
		}
	}
   
}
