package binary;

import implementation.ClientJMS;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.jms.BytesMessage;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;

import javax.jms.Session;


/* Annick Fron
 * Recepteur JMS de donnees binaires
 * Attention a bien purger la Queue de messages de type texte
 */

public class Recepteur extends ClientJMS {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		new Recepteur().run();
	}

	public void run() {
		ConnectionFactory cf = getConnectionFactory();
		Connection connexion;
		try {
			connexion = cf.createConnection();
			Session session = connexion.createSession(false,
					Session.AUTO_ACKNOWLEDGE);
			// pour un Topic on aurait de meme createTopic...
			Destination queue = session.createQueue("SampleQ1");

			MessageConsumer receiver = session.createConsumer(queue);
			// ne pas oublier de demarrer la connexion
			connexion.start();
			// réception d’un message de type binaire
			BytesMessage inMessage = (BytesMessage) receiver.receive();
			System.out.println("Message reçu  " );
			regenereFichier(inMessage);
			System.out.println("OK");
			// fermeture de la connexion et de la session
			connexion.close();

		} catch (JMSException e) {
			
			System.out.println(e.getMessage());
		}
		
	}
	
	private void regenereFichier(Message inMessage) {
		// creation d'un fichier equivalent a celui recu photo.gif
		int size;
		try {
			// on recupere la taille du fichier dans l'en tete du message
			size = inMessage.getIntProperty("size");
			if (size > 0){
				byte[] replyBytes = new byte[size];
				((BytesMessage) inMessage).readBytes(replyBytes);
				FileOutputStream outFile =
					new FileOutputStream("copiePhoto.gif" );
				outFile.write(replyBytes);
				outFile.close();}
		} catch (JMSException e) {
		
			e.printStackTrace();
		
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}}
		
	
	
}
