import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQBytesMessage;

import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicSession;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class JmsChatClient {

	public static void main(String[] args) throws JMSException {
		ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("ssl://jms.messagebus.org:61616");

		TopicConnection connection = connectionFactory.createTopicConnection();
		connection.start();

		TopicSession publisherSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
		Topic topic = publisherSession.createTopic("chat");
		MessageProducer producer = publisherSession.createPublisher(topic);

		TopicSession subscriberSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
		MessageConsumer consumer = subscriberSession.createSubscriber(topic);

		consumer.setMessageListener(message -> {
			try {
				ActiveMQBytesMessage bytesMessage = (ActiveMQBytesMessage) message;
				byte[] receivedBytes = new byte[(int) bytesMessage.getBodyLength()];
				bytesMessage.readBytes(receivedBytes);
				System.out.println("Received >> " + new String(receivedBytes));
				connection.close();
			} catch (JMSException e) {
				// Handle
			}
		});

		System.out.println("Enter a message");
		String line = new Scanner(System.in).nextLine();
		BytesMessage message = publisherSession.createBytesMessage();
		message.writeBytes(line.getBytes(StandardCharsets.UTF_8));
		producer.send(message);
	}
}

