changeset 10:8d3f8e4adba3

Utilisation d'un timer pour ne pas bloquer le thread principal. En effet, le sleep() sur le thread annulait totalement l'effet recherche initialement: en faisant dormir le thread, on empeche aussi les nouveaux messages d'etre analyses, et en consequent ils arrivent tous en cascade ensuite. A l'inverse, en utilisant un Timer et une TimerTask, on a bien une execution differee, mais on continue aussi d'avoir une reception normale des messages.
author Franck Deroche <webmaster@defr.net>
date Sat, 19 May 2007 23:35:46 +0200
parents 888f56363d6d
children 703c72bcc38e
files org/defr/bots/AdressedTimerTask.java org/defr/bots/Rusard.java
diffstat 2 files changed, 29 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org/defr/bots/AdressedTimerTask.java	Sat May 19 23:35:46 2007 +0200
@@ -0,0 +1,16 @@
+package org.defr.bots;
+
+import java.util.TimerTask;
+
+public abstract class AdressedTimerTask extends TimerTask {
+	private String to;
+	
+	public AdressedTimerTask(String to) {
+		super();
+		this.to = to;
+	}
+	
+	public String getTo() {
+		return to;
+	}
+}
--- a/org/defr/bots/Rusard.java	Sat May 19 22:25:29 2007 +0200
+++ b/org/defr/bots/Rusard.java	Sat May 19 23:35:46 2007 +0200
@@ -2,6 +2,8 @@
 
 import java.util.Random;
 import java.util.Calendar;
+import java.util.Timer;
+import java.util.TimerTask;
 import java.io.IOException;
 import java.text.DateFormat;
 import java.util.Locale;
@@ -61,18 +63,18 @@
 			sendMessage(replyTo, "Nous sommes le " + t);
 		}
 		else if(message.equalsIgnoreCase("lancement")) {
-			try {
-				Thread.sleep((long) (Math.random() * 5000));
-			} catch (InterruptedException e) {
-				System.err.println("Interuption du sommeil, envoi direct du message");
-			}
-			sendMessage(replyTo, "Lapin");
-			addMessageListener("Bunny", new Callback() {
-				public void go(String sender, String replyTo, String message) {
-					sendMessage(replyTo, "Premier : " + sender);
+			Timer timer = new Timer();
+			timer.schedule(new AdressedTimerTask(replyTo) {
+
+				public void run() {
+					sendMessage(getTo(), "Lapin");
+					addMessageListener("Bunny", new Callback() {
+						public void go(String sender, String replyTo, String message) {
+							sendMessage(replyTo, "Premier : " + sender);
+						}
+					});
 				}
-			});
-			
+			}, (long)(Math.random() * 5000));
 		}
 		else if(message.equalsIgnoreCase("de")) {
 			int v = random.nextInt(6) + 1;