/** * Title: iSIM * Copyright: Copyright (c) 2002 * Company: University of Oregon Computer Science Dept. * * @author Jason Prideaux * @version 1.0 * */ package agent.autonomous; import agent.*; import controller.*; import gui.*; import transport.*; import transport.protocol.*; import java.awt.*; import java.awt.event.*; import java.util.Date; import java.io.*; /* ====================================================================== */ /** This abstract class extends the regular user-controlled agent in iSIM. * It provides a set of methods for sensing and actuating. This class will * get data from iSIM and pass it to the autonomous agents via sense methods. * It then provides actuation for autonomous agents with actuate methods, * which pass the data into iSIM. * */ public abstract class Autonomous extends User implements SocketReceiverListener{ /** The simulation controller. */ private Controller controller; /* ====================================================================== */ /** This constructor sets up the information needed for this class to * successfully act as mediator bewteen iSIM and autonomous agents. * * @param c The iSIM controller. * @param loc The location of the agent. * @param port The communication port need to speak with iSIM. * @param range The wireless max range. * @param s The name of the autonomous agent. * */ public Autonomous(Controller c, Point loc, int port, int range, String s){ // Super our agent/user information. super(s, loc, port, range); // As an Autonomous robot, we listen/sense for environment information. SocketReceiver sr = new SocketReceiver(this, port); sr.start(); //simulation controller controller = c; controller.locationChange(this); controller.fireControllerChange(); controller.getChartComp().repaint(); } //Constructor // This is how autonomous agents get location information. public abstract void senseLocation(Point loc, double hea); // This is how autonomous agents get networking message information. public abstract void senseMessage(HelpMessage msg); // This is how autonomous agents change their location. public void actuateLocation(Point loc, double hea){ try{ Thread.sleep(1000); }catch(Exception e){} this.getPosition().setHeading(hea); controller.getChartComp().repaint(); try{ Thread.sleep(1000); }catch(Exception e){} this.setLocation(loc); controller.locationChange(this); controller.fireControllerChange(); controller.getChartComp().repaint(); } // This is how autonomous agents send a networking message. public void actuateMessage(HelpMessage msg){ SocketSender ss = new SocketSender(msg); ss.start(); } /* ====================================================================== */ /** iSIM sends messages to all agent devices. This is how agents get input * from the simulator. The input could be many types of messages from iSIM, * so this method gets the iSIM message, checks for the type of message, * and then passes the data to the autonomous agent. * * @param msg The incoming message from iSIM. * */ public void incomingMessage(Message msg){ // Location information if( msg instanceof NMEAMessage ){ senseLocation( this.getLocation(), this.getPosition().getHeading() ); // A message that allows robots to communicate with one another. }else if( msg instanceof HelpMessage ){ senseMessage((HelpMessage)msg); } } //method: incomingMessage } //class: Autonomous