[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