package asynchrone.queue;

import implementation.ClientJMS;

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.MessageListener;

import javax.jms.Session;
import javax.jms.TextMessage;

/* Annick Fron
 * 
 * A lancer avant ou apres l'emetteur
 * La Queue va stocker le message entre les deux lancements
 */

public class Recepteur extends ClientJMS implements MessageListener {
	private Object wait;
	/**
	 * @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);
			receiver.setMessageListener(this);
			// ne pas oublier de demarrer la connexion
			connexion.start();
			System.out.println("Thread id lancement" +
			        Thread.currentThread().getId());
			wait= new Object();
			synchronized(wait) {wait.wait();}; // attente de messages
			// fermeture de la connexion et de la session
			connexion.close();

		} catch (JMSException e) {
			
			System.out.println(e.getMessage());
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public void onMessage(Message message) {
		// remplace le receive synchrone
		// Affiche le contenu du message à la console 
		try {
			System.out.println(((TextMessage) message).getText());
			// Vérifie que le thread utilisé est différent
			System.out.println("Thread id onMessage "+ Thread.currentThread().getId());

			
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}
