package protocol;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import net.TCPServeur;

public abstract class TCPServeurMessage extends TCPServeur implements MessageConnection{

	private ObjectInputStream in;
	private ObjectOutputStream out;

	
	@Override
	public void gereClient(Socket client) {
		// TODO Auto-generated method stub
		try {
			out = new ObjectOutputStream(client.getOutputStream());
			in = new ObjectInputStream(new BufferedInputStream(client.getInputStream()));
			gereClient();
		} catch (IOException e) {
			System.out.println( e ) ;
			System.out.println("Terminaison anormale de la connexion couche communication par Message. " +
					"Ce Thread de traitement d'un client va se terminer.");
		}
	}

	/** A surcharger par les utilisateurs */
	abstract public void gereClient() ;

	/** Appel bloquant si pas de message à lire 
	 * @return le message lu
	 * */
	public Message getMessage () throws IOException { 
		try {
			return (Message) in.readObject();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			throw new IOException(e.toString());
		}
	}
	
	/** Appel bloquant si la connection est saturée. En général, non bloquant. 
	 * @param m le message à émettre
	 * @throws IOException 
	 * */
	public void sendMessage (Message m) throws IOException {
		out.writeObject(m);
	}
	
}
