Package com.grt192.controller.cannonbot

Source Code of com.grt192.controller.cannonbot.CBRPGController

package com.grt192.controller.cannonbot;

import org.json.me.JSONException;
import org.json.me.JSONObject;

import com.grt192.core.EventController;
import com.grt192.mechanism.GRTDriverStation;
import com.grt192.mechanism.cannonbot.CBArm;
import com.grt192.mechanism.cannonbot.CBCannon;
import com.grt192.mechanism.cannonbot.CBTankDriveTrain;
import com.grt192.networking.GRTSingleClientServer;
import com.grt192.networking.SocketEvent;
import com.grt192.networking.SocketListener;

/**
*
* @author anand
*
*/
public class CBRPGController extends EventController implements SocketListener {
  // Mechanisms
  private GRTDriverStation ds;
  private CBTankDriveTrain driveTrain;
  private CBCannon cannon;
  private CBArm arm;
  private GRTSingleClientServer server;

  public CBRPGController(GRTDriverStation ds, CBTankDriveTrain dt,
      CBCannon cannon, CBArm arm, int port) {
    this.ds = ds;
    this.driveTrain = dt;
    this.arm = arm;
    this.cannon = cannon;
    server = new GRTSingleClientServer(port);
    server.addSocketListener(this);
    server.start();
  }

  /**
   * When data arrives on the socket, we parse it to JSON and then send the
   * resulting data structure to be interpreted for use.
   */
  public void dataRecieved(SocketEvent e) {
    try {
      JSONObject command = new JSONObject(e.getData());
      // parsing JSON can throw json exceptions.
      doCommand(command);
    } catch (Exception e1) {
      e1.printStackTrace();
    }
  }

  public void onConnect(SocketEvent e) {
    // TODO Auto-generated method stub

  }

  public void onDisconnect(SocketEvent e) {
    // TODO Auto-generated method stub

  }

  /**
   * Given a JSONObject (essentially a hashtable) compare the "command" value
   * to possible commandtypes... if its one of the commands, extract the
   * appropriate parameters.
   *
   * @throws JSONException
   */
  protected void doCommand(JSONObject command) throws JSONException {
    if (command.getString("command").equals("moveto")) {
      double r = Double.parseDouble(command.getString("r"));
      double theta = Double.parseDouble(command.getString("theta"));
      double speed = Double.parseDouble(command.getString("speed"));
      drive(r, theta, speed);
    }
    if (command.getString("command").equals("arm")) {
      // toggle the arm
      this.arm.toggleArm();
    }
    if (command.getString("command").equals("fire")) {
      // fire the cannon
      this.cannon.fire();
    }
    if (command.getString("command").equals("stop")) {
      // stop DTs
      this.driveTrain.stop();
    }
    if (command.getString("command").equals("getstatus")) {
      JSONObject statusData = new JSONObject();
      // Put data into object..
      statusData.put("x", "" + driveTrain.getX());
      statusData.put("y", "" + driveTrain.getY());
      statusData.put("heading", "" + driveTrain.getHeading());
      statusData.put("arm", "" + arm.isExtended());
      statusData.put("firing", "" + cannon.isFiring());
      statusData.put("ready", "" + cannon.readyToFire());
     
      // Serialize it
      server.sendData(statusData.toString() + "\n");
    }
  }

  /**
   * This takes a distance and angle at which a target point is located, and
   * issues appropriate drive and turn commands to get there. uses
   * http://code.
   * google.com/p/grt192/source/browse/trunk/CannonBot/src/com/grt192
   * /mechanism/cannonbot/CBTankDriveTrain.java
   */
  protected void drive(double distance, double angle, double speed,
      boolean pointTurn) {
    if (pointTurn) {
      driveTrain.turnTo(angle, pointTurn);
      driveTrain.driveDistance(distance);
    }
  }

  protected void drive(double distance, double angle, double speed) {
    drive(distance, angle, speed, true);
  }
}
TOP

Related Classes of com.grt192.controller.cannonbot.CBRPGController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.