[TeamTalk 13]: [550] TeamTalk/Agents/PenDecoder: Added code to process task status updates .

tk@edam.speech.cs.cmu.edu tk at edam.speech.cs.cmu.edu
Thu Dec 7 16:55:59 EST 2006


An HTML attachment was scrubbed...
URL: http://mailman.srv.cs.cmu.edu/pipermail/teamtalk-developers/attachments/20061207/c3807f25/attachment.html
-------------- next part --------------
Modified: TeamTalk/Agents/PenDecoder/.nbintdb
===================================================================
(Binary files differ)

Modified: TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/DrawingPad.java
===================================================================
--- TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/DrawingPad.java	2006-12-07 21:49:06 UTC (rev 549)
+++ TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/DrawingPad.java	2006-12-07 21:55:59 UTC (rev 550)
@@ -19,6 +19,8 @@
   protected java.util.List<PenDecoderServer> servers = new java.util.Vector<PenDecoderServer>();
   protected Imager imager;
   
+  public TaskKeeper taskKeeper = new TaskKeeper();
+  
   public DrawingPad(String title) {
     super(title);
     
@@ -35,6 +37,10 @@
           try {
             if(tool.getName() == "Zoom Out") {
               drawingCanvas.zoomOut();
+            } else if(tool.getName() == "Cancel Task") {
+              Integer lastAdded = taskKeeper.getLastAdded();
+              if(lastAdded == null) System.err.println("There are no tasks.");
+              else cancelTask(lastAdded);
             } else if(tool.getName() == "Start Session") {
               startSession();
               ToggleButtonTool bt = (ToggleButtonTool)tool;
@@ -122,6 +128,7 @@
             "Click to zoom into a point on the map.", 
             PointTool.ZOOMIN));
     t.addTool(new ButtonTool(drawingCanvas, "Zoom Out", "Zoom out to see the entire map."));
+    t.addTool(new ButtonTool(drawingCanvas, "Cancel Task", "Cancel the last task."));
     t.addTool(new NPointTool(drawingCanvas, 
             "Search", 
             "Select waypoints along which to search.", 
@@ -177,6 +184,10 @@
     }
   }
   
+  public void cancelTask(Integer taskid) {
+    for(PenDecoderServer server : servers) server.cancelTask(taskid);
+  }
+  
   public void startSession() {
     ListIterator<PenDecoderServer> i = servers.listIterator();
     while(i.hasNext()) {

Modified: TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/Imager.java
===================================================================
--- TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/Imager.java	2006-12-07 21:49:06 UTC (rev 549)
+++ TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/Imager.java	2006-12-07 21:55:59 UTC (rev 550)
@@ -3,9 +3,6 @@
  *
  * Created on September 25, 2006, 3:23 PM
  *
- * To change this template, choose Tools | Options and locate the template under
- * the Source Creation and Management node. Right-click the template and choose
- * Open. You can then make changes to the template in the Source Editor.
  */
 
 package edu.cmu.ravenclaw.pendecoder;
@@ -23,6 +20,7 @@
  */
 public class Imager extends Canvas {
   
+  static final long serialVersionUID = -2498616324568959806L;
   BufferedImage image;
   
   /** Creates a new instance of Imager */

Modified: TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/PenDecoderServer.java
===================================================================
--- TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/PenDecoderServer.java	2006-12-07 21:49:06 UTC (rev 549)
+++ TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/PenDecoderServer.java	2006-12-07 21:55:59 UTC (rev 550)
@@ -73,6 +73,44 @@
     return (GFrame) null;
   }
   
+  public GFrame serverOpTaskUpdate(GFrame f) {
+    System.err.println("got task update");
+    String type = (String)f.getProperty(":type");
+    Integer taskid = (Integer)f.getProperty(":taskid");
+    if(taskid == null) {
+      System.err.println("task update with no taskid!");
+      return (GFrame)null;
+    }
+    if(type == null) {
+      System.err.println("task update with no type");
+      return (GFrame)null;
+    }
+    if(type.equalsIgnoreCase("done")) {
+      Integer status = (Integer)f.getProperty(":status");
+      if(status == null) {
+        System.err.println("task done update with no status!");
+        return (GFrame)null;
+      }
+      boolean bstatus = (status != 0);
+      if(bstatus) frame.taskKeeper.succeedtask(taskid);
+      else frame.taskKeeper.failtask(taskid);
+    } else if(type.equalsIgnoreCase("ack")) {
+      frame.taskKeeper.addTask(taskid);
+    } else {
+      System.err.println("unhandled trader message type: " + type);
+      return (GFrame)null;
+    }
+    //String active_rendering = null;
+    String active_rendering = tk.utils.Utils.join(frame.taskKeeper.getActive(), " ");
+    //for(Integer i : frame.taskKeeper.getActive()) active_rendering += i.toString() + ' ';
+    //String succeeded_rendering = null;
+    String succeeded_rendering = tk.utils.Utils.join(frame.taskKeeper.getSucceeded(), " ");
+    //for(Integer i : frame.taskKeeper.getSucceeded()) succeeded_rendering += i.toString() + ' ';
+    frame.getInterpreter().print_bot("active tasks", active_rendering);
+    frame.getInterpreter().print_bot("succeeded tasks", succeeded_rendering);
+    return (GFrame) null;
+  }
+  
   public GFrame serverOpSetGoal(GFrame f) {
     String name = (String)f.getProperty(":robot_name");
     boolean relative = (((Integer)f.getProperty(":relative")).intValue() == 1);
@@ -195,12 +233,12 @@
   }
   
   public void placeBot(String name, float x, float y, float theta) {
-    System.err.println("placing bot " + name + ": (" + x + " " + y + ") " + theta);
+    System.err.println("placing bot " + name + ": (" + x/100 + " " + y/100 + ") " + theta);
     Map<String, String> pose = new HashMap<String, String>();
-    pose.put("[x]", Double.toString(x));
-    pose.put("[y]", Double.toString(y));
+    pose.put("[x]", Double.toString(x/100));
+    pose.put("[y]", Double.toString(y/100));
     pose.put("[angle]", Double.toString(theta));
-    sayToBot("Commands", "[SetPoseCommand]", pose);
+    sayToBot("Commands", "[HumanSetPoseCommand]", pose);
   }
   
   public void search(RectangleShape shape) {
@@ -226,6 +264,13 @@
     sayToBot("Commands", "[HumanExploreCommand]", loc);
   }
   
+  public void cancelTask(Integer taskid) {
+    System.err.println("Cancelling " + taskid);
+    Map<String, String> task = new HashMap<String, String>();
+    task.put("[taskid]", taskid.toString());
+    sayToBot("Commands", "[HumanCancelTaskCommand]", task);
+  }
+  
   public void search(PolyLineShape shape) {
     System.err.println("Searching...");
     Map<String, String> loc = new HashMap<String, String>();

Added: TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/TaskKeeper.java
===================================================================
--- TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/TaskKeeper.java	                        (rev 0)
+++ TeamTalk/Agents/PenDecoder/src/edu/cmu/ravenclaw/pendecoder/TaskKeeper.java	2006-12-07 21:55:59 UTC (rev 550)
@@ -0,0 +1,69 @@
+/*
+ * TaskKeeper.java
+ *
+ * Created on December 4, 2006, 4:02 PM
+ *
+ * To change this template, choose Tools | Options and locate the template under
+ * the Source Creation and Management node. Right-click the template and choose
+ * Open. You can then make changes to the template in the Source Editor.
+ */
+
+package edu.cmu.ravenclaw.pendecoder;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ *
+ * @author tkharris
+ */
+public class TaskKeeper {
+  private List<Integer> activetasks = new LinkedList<Integer>();
+  private List<Integer> failedtasks = new LinkedList<Integer>();
+  private List<Integer> succeededtasks = new LinkedList<Integer>();
+  private List<Integer> cancelledtasks = new LinkedList<Integer>();
+  
+  /** Creates a new instance of TaskKeeper */
+  public TaskKeeper() {}
+  
+  public void addTask(Integer taskid) {
+    activetasks.add(taskid);
+  }
+  
+  public void succeedtask(Integer taskid) {
+    activetasks.remove(taskid);
+    succeededtasks.add(taskid);
+  }
+  
+  public void failtask(Integer taskid) {
+    activetasks.remove(taskid);
+    failedtasks.add(taskid);
+  }
+  
+  //boolean cancelLastTask() {
+  //  if(activetasks.isEmpty()) return false;
+  //  cancelledtasks.add(activetasks.remove(0));
+  //  return true;
+  //}
+  
+  public List<Integer> getActive() {
+    return activetasks;
+  }
+  
+  public List<Integer> getSucceeded() {
+    return succeededtasks;
+  }
+  
+  public List<Integer> getFailed() {
+    return failedtasks;
+  }
+  
+  public List<Integer> getCancelled() {
+    return cancelledtasks;
+  }
+  
+  public Integer getLastAdded() {
+    if(activetasks.isEmpty()) return (Integer)null;
+    return activetasks.get(activetasks.size()-1);
+  }
+}

Added: TeamTalk/Agents/PenDecoder/src/tk/utils/Utils.java
===================================================================
--- TeamTalk/Agents/PenDecoder/src/tk/utils/Utils.java	                        (rev 0)
+++ TeamTalk/Agents/PenDecoder/src/tk/utils/Utils.java	2006-12-07 21:55:59 UTC (rev 550)
@@ -0,0 +1,38 @@
+/*
+ * Utils.java
+ *
+ * Created on December 6, 2006, 2:11 PM
+ *
+ * To change this template, choose Tools | Options and locate the template under
+ * the Source Creation and Management node. Right-click the template and choose
+ * Open. You can then make changes to the template in the Source Editor.
+ */
+
+package tk.utils;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ *
+ * @author tkharris
+ */
+public class Utils {
+  
+  /** Creates a new instance of Utils */
+  public Utils() {
+  }
+  
+  public static String join(Collection s, String delimiter) {
+    StringBuffer buf = new StringBuffer();
+    Iterator i = s.iterator();
+    if(i.hasNext()) {
+      buf.append(i.next());
+      while(i.hasNext()) {
+        buf.append(delimiter);
+        buf.append(i.next());
+      }
+    }
+    return buf.toString();
+  }
+}


More information about the TeamTalk-developers mailing list