/*
* La classe Serveur cré 1 instance de cette classe par client qui se connecte pour traiter les login/nvelles *connexions. Juste après sa création, il se transforme en thread
* pour que les autres instances de ServeurDialogueM 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 ServeurDialogueM implements Runnable {

	Socket client;
	BufferedReader depuisClient,clavier;
	PrintStream versClient;
	int somme = 0;
	String login,com;
	

	public ServeurDialogueM(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="";
			while ( lue != "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());
		}
		stop2();
	}


	public void traitementReception(String recu){

		if(recu.indexOf(":")>0)//si le message a un format correct
		{

			login = recu.substring(0,recu.indexOf(":"));
			String ip ="";
			String port="";
			if(recu.indexOf(">")>0) {
				ip = recu.substring(recu.indexOf(":")+1,recu.indexOf(">"));
				port = (recu.substring(recu.indexOf(">")+1));
				System.out.println("-> CONNEXION de <"+login+"> sur le chat");
				ServeurM.ajouterCarClient(recu);
				ServeurM.envoyer(this,login+":"+ip+">"+port);
			}
			else  { 
				System.out.println("Le serveur a recu -> "+recu);
			}
		}
		else  { 
			login = recu.substring(recu.indexOf("-")+1);
			System.out.println("-> DECONNEXION de <"+login+">");
			ServeurM.retirerCarClient(login);
			stop2();
		}

	}

	public void envoyer(String texte) {
		versClient.println(texte);
	}

	public void stop2() {
		try {

			ServeurM.retirerClient(this);
			client.close();
		} catch (IOException e) {
			System.out.println("exception a la fermeture d'une connexion : "+e);
		}
	}
   
}
