package classes;

import java.net.InetAddress;
import java.net.Socket;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
import processamento.Imagem3D;

public class Cliente1 {

	private Socket cliente1;
	private ObjectInputStream input;
	private ObjectOutputStream output;
	private Imagem3D objImagem;
	
	public void runCliente1(){
		
		/*
		 * 
		 */
		try{

			cliente1 = new Socket(InetAddress.getLocalHost(), 56789);
			
		}catch(IOException e){
			System.out.println("Exceção ao inicializar conexão com o Servidor");
			e.printStackTrace();
		}
		
		/*
		 *  
		 */
		try{
			
			output = new ObjectOutputStream(cliente1.getOutputStream());
			output.flush();
			input = new ObjectInputStream(cliente1.getInputStream());
			
			System.out.println("Conexão iniciada com servidor " + cliente1.getInetAddress().getHostName());			
			
		}catch(IOException e){
			System.out.println("Exceção ao estabelecer conexão com servidor");
			e.printStackTrace();
		}
		
		/*
		 * 
		 */
		try{
			
			objImagem = new Imagem3D();
			objImagem.setVersao(1);
			System.out.println("Versao do objeto = " + objImagem.getVersao());
			output.writeObject(objImagem);
			output.flush();
			objImagem = (Imagem3D) input.readObject();
			System.out.println("Versao do objeto = " + objImagem.getVersao());
			
		}catch(IOException e1){
			e1.printStackTrace();
		}catch(ClassNotFoundException e2){
			e2.printStackTrace();
		}
		
		/*
		 * Apos realizado o processamento desejado no servidor, a conexão com o cliente é finalizada
		 * E o servidor volta a aguardar novas conexões para processar outros objetos
		 */
		try{
			input.close();
			output.close();
			cliente1.close();
		}catch(IOException e){
			System.out.println("Exceção ao fechar conexão com cliente!");
			e.printStackTrace();
		}
	}
	
	/*
	 * Metodo para inicializar programa cliente
	 */
	public static void main(String[] args) {
		Cliente1 client1 = new Cliente1();
		client1.runCliente1();
	}
}