Mercurial > hg > Members > kono > jpf-core
view src/examples/RobotManager.java @ 0:61d41facf527
initial v8 import (history reset)
author | Peter Mehlitz <Peter.C.Mehlitz@nasa.gov> |
---|---|
date | Fri, 23 Jan 2015 10:14:01 -0800 |
parents | |
children |
line wrap: on
line source
/* * Copyright (C) 2014, United States Government, as represented by the * Administrator of the National Aeronautics and Space Administration. * All rights reserved. * * The Java Pathfinder core (jpf-core) platform is licensed under the * Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0. * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random; /** * a simplified version of the AWT RobotManager example */ public class RobotManager { static class Robot { String id; Robot (String id){ this.id = id; } String getId(){ return id; } String processSequence(String sequence){ System.out.printf("robot %s processing sequence: %s\n", id, sequence); return "Ok"; } } class StatusAcquisitionThread extends Thread { boolean done; public StatusAcquisitionThread () { setDaemon(true); } @Override public void run () { int n = robotList.size(); Random random = new Random(0); while (!done) { int idx = random.nextInt(n); Robot robot = robotList.get(idx); setRobotOnline(robot, !isRobotOnline(robot.id)); try { Thread.sleep(3000); } catch (InterruptedException ix) { } } } public void terminate () { done = true; } } List<Robot> robotList = new ArrayList<Robot>(); HashMap<String,Robot> onlineRobots = new HashMap<String,Robot>(); StatusAcquisitionThread acquisitionThread; public RobotManager() { robotList.add( new Robot("RATS-1")); robotList.add( new Robot("RATS-2")); robotList.add( new Robot("RCAT-1")); robotList.add( new Robot("POGO-1")); for (Robot r : robotList) { setRobotOnline(r, true); } } public void setRobotOnline (Robot robot, boolean isOnline) { if (isOnline) { onlineRobots.put(robot.getId(), robot); } else { onlineRobots.remove(robot.getId()); } } public boolean isRobotOnline (String robotName) { return onlineRobots.containsKey(robotName); } public Robot getOnlineRobot (String robotName) { return onlineRobots.get(robotName); } public String sendSequence(Robot robot, String sequence) { return robot.processSequence(sequence); } void startStatusAcquisitionThread (){ acquisitionThread = new StatusAcquisitionThread(); acquisitionThread.start(); } void stopStatusAcquisitionThread(){ acquisitionThread.terminate(); } void processInput (){ String robotName = "POGO-1"; String sequence = "left; go"; if (isRobotOnline(robotName)){ Robot robot = getOnlineRobot( robotName); String result = robot.processSequence(sequence); System.out.printf("sent sequence \"%s\" to robot %s => %s\n", sequence, robotName, result); } else { System.out.print("robot not online: "); System.out.println(robotName); } } public static void main (String[] args){ RobotManager robotManager = new RobotManager(); robotManager.startStatusAcquisitionThread(); robotManager.processInput(); //robotManager.stopStatusAcquisitionThread(); } }