From cb5719232c5879d738be18a3eb0c26a1a844b8c3 Mon Sep 17 00:00:00 2001 From: Rochas Date: Mon, 21 Apr 2025 17:58:51 +0200 Subject: [PATCH] chat fini --- README.md | 22 +++++- src/main/java/fr/istic/chat/clientChat.java | 76 +++++++++++++++++++ src/main/java/fr/istic/chat/espion.java | 35 +++++++++ .../java/fr/istic/date/route/EnvoyerDate.java | 34 ++++----- .../fr/istic/date/route/RecevoirDate.java | 3 +- .../java/fr/istic/date/topic/EnvoyerDate.java | 38 +++++----- .../istic/date/topic/RecevoirToutesDate.java | 32 ++++++++ 7 files changed, 197 insertions(+), 43 deletions(-) create mode 100644 src/main/java/fr/istic/chat/clientChat.java create mode 100644 src/main/java/fr/istic/chat/espion.java create mode 100644 src/main/java/fr/istic/date/topic/RecevoirToutesDate.java diff --git a/README.md b/README.md index ab8a62e..5453d45 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,28 @@ Vous pouvez le partager avec votre binome et l'encadrant de TP. ## Rapport -Votre rapport doit être écrit ici en markdown. - +Votre rapport doit être écrit ici en markdown. :/ Vous trouverez la syntaxe de markdown ici : https://docs.gitlab.com/ee/user/markdown.html - Placez vos images dans le répertoire images si nécessaire. +### Binôme : +Thibaut ROCHAS, Tuan Minh VU + +### Introduction + +On a utilisé CloudAMQP, qui semblait être la solution la plus simple pour commencer le TP rapidement. +Les exemples ont tous été testés, avec notre serveur RabitMQ. +Avec l’aide des exemples et du cours, on a pu faire la partie Date sans grande difficulté. +Ensuite, le chat n’était pas très compliqué, on a fait le bonus espion. + +### Déroulement du TP + +#### Exemples + +#### Date + +#### Chat + ## Faire des diagrammes diff --git a/src/main/java/fr/istic/chat/clientChat.java b/src/main/java/fr/istic/chat/clientChat.java new file mode 100644 index 0000000..0b450df --- /dev/null +++ b/src/main/java/fr/istic/chat/clientChat.java @@ -0,0 +1,76 @@ +package fr.istic.chat; + + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +import com.rabbitmq.client.AMQP; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.DeliverCallback; + /* + * & 'C:\Program Files\Java\jre1.8.0_431\bin\java.exe' '-cp' 'C:\Users\Thibaut\AppData\Local\Temp\cp_223j5v7zmzailham0c6y3u9rd.jar' 'fr.istic.chat.clientChat' sujet.test A + */ +public class clientChat { + private static final String EXCHANGE_NAME = "chat"; + + public static void main(String[] argv) throws Exception { + + String canal = argv[0]; + String name = argv[1]; + System.out.println("canal : " + canal); + System.out.println("name : " + name); + + ConnectionFactory factory = new ConnectionFactory(); + factory.setUri("amqps://cyvthtfj:O8LmaXkX5mVB0oFZN9TobaK8rX9wEhol@whale.rmq.cloudamqp.com/cyvthtfj"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + channel.exchangeDeclare(EXCHANGE_NAME, "topic"); + + + receiveMessage(channel, canal, name); + + sendMessage(connection ,channel, canal, name); + } + + + private static void receiveMessage(Channel channel, String canal, String name) throws Exception{ + + String queueName = channel.queueDeclare().getQueue(); + channel.queueBind(queueName, EXCHANGE_NAME, canal); + + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + String message = new String(delivery.getBody(), "UTF-8"); + Object senderName = (delivery.getProperties().getHeaders().get("sender")); + String routing = delivery.getEnvelope().getRoutingKey(); + System.out.println(routing+"#"+senderName+">" + message); + }; + channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { + }); + } + + private static void sendMessage(Connection connection, Channel channel, String canal, String name) throws Exception{ + Map headers = new HashMap<>(); + headers.put("sender", name); + AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().headers(headers).build(); + + Scanner scanner = new Scanner(System.in); + boolean test = true; + while(test){ + String message = scanner.nextLine(); + test = message.compareTo("\\exit")!=0; + if(test){ + channel.basicPublish(EXCHANGE_NAME, canal, props, message.getBytes("UTF-8")); + //System.out.println("<- ["+name+"](vous) : "+"'" + message + "'"); + } + } + channel.close(); + connection.close(); + scanner.close(); + System.out.println("exit"); + } +} diff --git a/src/main/java/fr/istic/chat/espion.java b/src/main/java/fr/istic/chat/espion.java new file mode 100644 index 0000000..869bc82 --- /dev/null +++ b/src/main/java/fr/istic/chat/espion.java @@ -0,0 +1,35 @@ +package fr.istic.chat; + +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.DeliverCallback; + +public class espion { + private static final String EXCHANGE_NAME = "chat"; + + public static void main(String[] argv) throws Exception { + + ConnectionFactory factory = new ConnectionFactory(); + factory.setUri("amqps://cyvthtfj:O8LmaXkX5mVB0oFZN9TobaK8rX9wEhol@whale.rmq.cloudamqp.com/cyvthtfj"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + channel.exchangeDeclare(EXCHANGE_NAME, "topic"); + + + + String queueName = channel.queueDeclare().getQueue(); + channel.queueBind(queueName, EXCHANGE_NAME, "#"); + + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + String message = new String(delivery.getBody(), "UTF-8"); + Object senderName = (delivery.getProperties().getHeaders().get("sender")); + String routing = delivery.getEnvelope().getRoutingKey(); + System.out.println(routing+"#"+senderName+">" + message); + }; + channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { + }); + } +} diff --git a/src/main/java/fr/istic/date/route/EnvoyerDate.java b/src/main/java/fr/istic/date/route/EnvoyerDate.java index f636df9..f8083d0 100644 --- a/src/main/java/fr/istic/date/route/EnvoyerDate.java +++ b/src/main/java/fr/istic/date/route/EnvoyerDate.java @@ -13,32 +13,28 @@ public class EnvoyerDate { public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setUri("amqps://cyvthtfj:O8LmaXkX5mVB0oFZN9TobaK8rX9wEhol@whale.rmq.cloudamqp.com/cyvthtfj"); - try (Connection connection = factory.newConnection(); - Channel channel = connection.createChannel()) { - while(true){ + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + channel.exchangeDeclare(EXCHANGE_NAME, "direct"); - channel.exchangeDeclare(EXCHANGE_NAME, "direct"); + while(true){ - String message = argv.length < 1 ? getDate() - : String.join(" ", argv); + String message = argv.length < 1 ? getDate() + : String.join(" ", argv); - channel.basicPublish(EXCHANGE_NAME, "locale", null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + message + "'"); + channel.basicPublish(EXCHANGE_NAME, "locale", null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + message + "'"); - String messageGMT = argv.length < 1 ? getDateGMT() - : String.join(" ", argv); + String messageGMT = argv.length < 1 ? getDateGMT() + : String.join(" ", argv); - channel.basicPublish(EXCHANGE_NAME, "gmt", null, messageGMT.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + messageGMT + "'"); + channel.basicPublish(EXCHANGE_NAME, "gmt", null, messageGMT.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + messageGMT + "'"); - try { - Thread.sleep(1000); // Attend 1 seconde (1000 millisecondes) - } catch (InterruptedException e) { - e.printStackTrace(); - } + Thread.sleep(1000); // Attend 1 seconde (1000 millisecondes) - } - } + + } } diff --git a/src/main/java/fr/istic/date/route/RecevoirDate.java b/src/main/java/fr/istic/date/route/RecevoirDate.java index 1f19b36..4c6852b 100644 --- a/src/main/java/fr/istic/date/route/RecevoirDate.java +++ b/src/main/java/fr/istic/date/route/RecevoirDate.java @@ -5,6 +5,7 @@ import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.DeliverCallback; + public class RecevoirDate { private static final String EXCHANGE_NAME = "direct_logs"; @@ -13,8 +14,8 @@ public class RecevoirDate { factory.setUri("amqps://cyvthtfj:O8LmaXkX5mVB0oFZN9TobaK8rX9wEhol@whale.rmq.cloudamqp.com/cyvthtfj"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); - channel.exchangeDeclare(EXCHANGE_NAME, "direct"); + String queueName = channel.queueDeclare().getQueue(); //la clé: locale channel.queueBind(queueName, EXCHANGE_NAME, "locale"); diff --git a/src/main/java/fr/istic/date/topic/EnvoyerDate.java b/src/main/java/fr/istic/date/topic/EnvoyerDate.java index 7683217..929466d 100644 --- a/src/main/java/fr/istic/date/topic/EnvoyerDate.java +++ b/src/main/java/fr/istic/date/topic/EnvoyerDate.java @@ -13,33 +13,31 @@ public class EnvoyerDate { public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setUri("amqps://cyvthtfj:O8LmaXkX5mVB0oFZN9TobaK8rX9wEhol@whale.rmq.cloudamqp.com/cyvthtfj"); - try (Connection connection = factory.newConnection(); - Channel channel = connection.createChannel()) { - while(true){ + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + channel.exchangeDeclare(EXCHANGE_NAME, "topic"); - channel.exchangeDeclare(EXCHANGE_NAME, "topic"); + while(true){ - String message = argv.length < 1 ? getDate() - : String.join(" ", argv); + String message = argv.length < 1 ? getDate() + : String.join(" ", argv); - channel.basicPublish(EXCHANGE_NAME, "date.locale", null, message.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + message + "'"); + channel.basicPublish(EXCHANGE_NAME, "date.locale", null, message.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + message + "'"); - String messageGMT = argv.length < 1 ? getDateGMT() - : String.join(" ", argv); + String messageGMT = argv.length < 1 ? getDateGMT() + : String.join(" ", argv); - channel.basicPublish(EXCHANGE_NAME, "date.gmt", null, messageGMT.getBytes("UTF-8")); - System.out.println(" [x] Sent '" + messageGMT + "'"); - - try { - Thread.sleep(1000); // Attend 1 seconde (1000 millisecondes) - } catch (InterruptedException e) { - e.printStackTrace(); - } + channel.basicPublish(EXCHANGE_NAME, "date.gmt", null, messageGMT.getBytes("UTF-8")); + System.out.println(" [x] Sent '" + messageGMT + "'"); + try { + Thread.sleep(1000); // Attend 1 seconde (1000 millisecondes) + } catch (InterruptedException e) { + e.printStackTrace(); } - } - + + } } public static String getDate(){ diff --git a/src/main/java/fr/istic/date/topic/RecevoirToutesDate.java b/src/main/java/fr/istic/date/topic/RecevoirToutesDate.java new file mode 100644 index 0000000..c4af75d --- /dev/null +++ b/src/main/java/fr/istic/date/topic/RecevoirToutesDate.java @@ -0,0 +1,32 @@ +package fr.istic.date.topic; + +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.DeliverCallback; + +public class RecevoirToutesDate { + private static final String EXCHANGE_NAME = "topic_log"; + + public static void main(String[] argv) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setUri("amqps://cyvthtfj:O8LmaXkX5mVB0oFZN9TobaK8rX9wEhol@whale.rmq.cloudamqp.com/cyvthtfj"); + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + + channel.exchangeDeclare(EXCHANGE_NAME, "topic"); + String queueName = channel.queueDeclare().getQueue(); + //la clé: date + channel.queueBind(queueName, EXCHANGE_NAME, "date.#"); + + System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); + + DeliverCallback deliverCallback = (consumerTag, delivery) -> { + String message = new String(delivery.getBody(), "UTF-8"); + System.out.println(" [x] Received '" + message + "'"); + }; + channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { + }); + } + +}