// Purpose.  Demo JMS point-to-point (mailbox) messaging

import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import javax.jms.*;
import com.sun.messaging.QueueConnectionFactory;

public class QueueDemoJmq {
  public static void main( String[] args ) throws IOException {
    QueueSession sess = null;
    Queue        que  = null;
    try {
      QueueConnectionFactory fact = new QueueConnectionFactory();
      // QueueConnectionFactory fact = new QueueConnectionFactory( args );
      QueueConnection        conn = fact.createQueueConnection();
      conn.start();                   // should the session be transacted
      sess = conn.createQueueSession( false, Session.AUTO_ACKNOWLEDGE );
      que  = sess.createQueue( "DemoQue" );
    } catch (JMSException ex) { ex.printStackTrace(); }

    BufferedReader in = new BufferedReader( new InputStreamReader(System.in));
    String line;
    while (true) {
      System.out.print( "Enter pub, sub, or quit: " );
      line = in.readLine();
      if      (line.equals("quit")) System.exit( 0 );
      else if (line.equals("pub")) new Sender( sess, que );
      else if (line.equals("sub")) new Receiver( sess, que );
} } }

class Sender extends JFrame implements ActionListener {
  private QueueSender sender;
  private TextMessage message;

  public Sender( QueueSession sess, Queue que ) {
    super( "Sender" );
    JTextField text = new JTextField( 30 );
    getContentPane().add( text );
    text.addActionListener( this );
    pack();
    setVisible( true );
    try {
      sender  = sess.createSender( que );
      message = sess.createTextMessage();
    } catch (JMSException ex) { ex.printStackTrace(); }
  }
  public void actionPerformed( ActionEvent e ) {
    try {
      message.setText( e.getActionCommand() );
      sender.send( message );
    } catch (JMSException ex) { ex.printStackTrace(); }
    ((javax.swing.text.JTextComponent)e.getSource()).setText( "" );
} }

class Receiver extends JFrame implements MessageListener {
  private JTextArea text;

  public Receiver( QueueSession sess, Queue que ) {
    super( "Receiver" );
    text = new JTextArea( 10,30 );
    getContentPane().add( text );
    pack();
    setVisible( true );
    try {
      QueueReceiver receiver = sess.createReceiver( que );
      receiver.setMessageListener( this );
    } catch (JMSException ex) { ex.printStackTrace(); }
  }
  public void onMessage( Message m ) {
    try { text.append( ((TextMessage)m).getText() + "\n" ); }
    catch (JMSException ex) { ex.printStackTrace(); }
} }
