praktikum3

This commit is contained in:
2026-05-08 11:30:51 +02:00
parent 66f9a12491
commit 1ab7c5836d
7 changed files with 743 additions and 579 deletions
@@ -0,0 +1,41 @@
package org.example.demo.praktikum3;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ChatWindow extends JFrame {
private JTextArea textArea;
private MessageReceiver receiver;
private JPanel inputPanel;
private JTextField messageInput;
private JButton messageSubmit;
private MessageSender sender;
public ChatWindow(MessageReceiver receiver, MessageSender sender) {
textArea = new JTextArea();
this.add(BorderLayout.NORTH, textArea);
receiver.setText(textArea);
inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout());
this.add(BorderLayout.SOUTH, inputPanel);
messageInput = new JTextField(20);
inputPanel.add(messageInput);
messageSubmit = new JButton("Submit");
messageSubmit.addActionListener(e -> {
sender.sendMessage(messageInput.getText());
});
inputPanel.add(messageSubmit);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
@@ -0,0 +1,36 @@
package org.example.demo.praktikum3;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import jakarta.jms.ConnectionFactory;
import jakarta.jms.Topic;
public class Client {
private int id;
public Client(int id) {
this.id = id;
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
props.setProperty(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080");
try {
InitialContext context = new InitialContext(props);
ConnectionFactory cf = (ConnectionFactory) context.lookup("jms/RemoteConnectionFactory");
Topic topic = (Topic) context.lookup("jms/topic/Praktikum3Topic");
var sender = new MessageSender(topic, cf, "Sender " + this.id + ": ");
var receiver = new MessageReceiver(topic, cf, null);
var win = new ChatWindow(receiver, sender);
win.setVisible(true);
win.setTitle("Chat - Sender " + this.id);
receiver.start();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,7 @@
package org.example.demo.praktikum3;
public class Client1 {
public static void main(String[] args) {
new Client(1);
}
}
@@ -0,0 +1,7 @@
package org.example.demo.praktikum3;
public class Client2 {
public static void main(String[] args) {
new Client(2);
}
}
@@ -0,0 +1,40 @@
package org.example.demo.praktikum3;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import jakarta.jms.ConnectionFactory;
import jakarta.jms.JMSConsumer;
import jakarta.jms.JMSContext;
import jakarta.jms.Topic;
public class MessageReceiver extends Thread {
private JTextArea text;
private Topic topic;
private ConnectionFactory cf;
public MessageReceiver(Topic topic, ConnectionFactory cf, JTextArea text) {
this.text = text;
this.topic = topic;
this.cf = cf;
}
public JTextArea getText() {
return text;
}
public void setText(JTextArea text) {
this.text = text;
}
public void run() {
try (JMSContext context = cf.createContext("guest", "guest")) {
JMSConsumer consumer = context.createConsumer(topic);
while (true) {
String message = consumer.receiveBody(String.class);
if (message != null) {
SwingUtilities.invokeLater(() -> text.append(message + "\n"));
}
}
}
}
}
@@ -0,0 +1,33 @@
package org.example.demo.praktikum3;
import jakarta.jms.ConnectionFactory;
import jakarta.jms.JMSContext;
import jakarta.jms.JMSProducer;
import jakarta.jms.TextMessage;
import jakarta.jms.Topic;
public class MessageSender {
private String prefix;
private Topic topic;
private ConnectionFactory cf;
public MessageSender(Topic topic, ConnectionFactory cf, String prefix) {
this.topic = topic;
this.cf = cf;
this.prefix = prefix;
}
public void sendMessage(String msg) {
var text = prefix + msg;
try (JMSContext context = cf.createContext("guest", "guest")) {
JMSProducer producer = context.createProducer();
TextMessage message = context.createTextMessage(text);
producer.send(topic, message);
System.out.println("Message '"+text+"' sent successfully.");
}
catch (Exception e) {
System.out.println("Message '"+text+"' couldn't be sent: " + e);
}
}
}