Mercurial > defr > bots
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;