/*******************************************************************************
* Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*
* Contributors:
* Mathew A. Nelson
* - Initial API and implementation
* Flemming N. Larsen
* - Added missing getMessageEvents()
* - Updated Javadocs
* - The uninitializedException() method does not need a method name as input
* parameter anymore
* Pavel Savara
* - Re-work of robot interfaces
*******************************************************************************/
package robocode;
import robocode.robotinterfaces.ITeamEvents;
import robocode.robotinterfaces.ITeamRobot;
import robocode.robotinterfaces.peer.ITeamRobotPeer;
import java.io.IOException;
import java.io.Serializable;
import java.util.Vector;
/**
* An advanced type of robot that supports sending messages between team
* mates in a robot team.
* <p/>
* If you have not done already, you should create a {@link Robot} or
* {@link AdvancedRobot} first.
*
* @author Mathew A. Nelson (original)
* @author Flemming N. Larsen (contributor)
* @author Pavel Savara (contributor)
* @see JuniorRobot
* @see Robot
* @see AdvancedRobot
* @see Droid
*/
public class TeamRobot extends AdvancedRobot implements ITeamRobot, ITeamEvents {
/**
* Broadcasts a message to all teammates.
* <p/>
* Example:
* <pre>
* public void run() {
* broadcastMessage("I'm here!");
* }
* </pre>
*
* @param message the message to broadcast to all teammates
* @throws IOException if the message could not be broadcasted to the
* teammates
* @see #isTeammate(String)
* @see #getTeammates()
* @see #sendMessage(String, Serializable)
*/
public void broadcastMessage(Serializable message) throws IOException {
if (peer != null) {
((ITeamRobotPeer) peer).broadcastMessage(message);
} else {
uninitializedException();
}
}
/**
* Returns a vector containing all MessageEvents currently in the robot's
* queue. You might, for example, call this while processing another event.
* <p/>
* Example:
* <pre>
* for (MessageEvent e : getMessageEvents()) {
* // do something with e
* }
* </pre>
*
* @return a vector containing all MessageEvents currently in the robot's
* queue
* @see #onMessageReceived(MessageEvent)
* @see MessageEvent
* @since 1.2.6
*/
public Vector<MessageEvent> getMessageEvents() {
if (peer != null) {
return new Vector<MessageEvent>(((ITeamRobotPeer) peer).getMessageEvents());
}
uninitializedException();
return null; // never called
}
/**
* Do not call this method!
* <p/>
* {@inheritDoc}
*/
public final ITeamEvents getTeamEventListener() {
return this; // this robot is listening
}
/**
* Returns the names of all teammates, or {@code null} there is no
* teammates.
* <p/>
* Example:
* <pre>
* public void run() {
* // Prints out all teammates
* String[] teammates = getTeammates();
* if (teammates != null) {
* for (String member : teammates) {
* out.println(member);
* }
* }
* }
* </pre>
*
* @return a String array containing the names of all your teammates, or
* {@code null} if there is no teammates. The length of the String array
* is equal to the number of teammates.
* @see #isTeammate(String)
* @see #broadcastMessage(Serializable)
* @see #sendMessage(String, Serializable)
*/
public String[] getTeammates() {
if (peer != null) {
return ((ITeamRobotPeer) peer).getTeammates();
}
uninitializedException();
return null;
}
/**
* Checks if a given robot name is the name of one of your teammates.
* <p/>
* Example:
* <pre>
* public void onScannedRobot(ScannedRobotEvent e) {
* if (isTeammate(e.getName()) {
* return;
* }
* fire(1);
* }
* </pre>
*
* @param name the robot name to check
* @return {@code true} if the specified name belongs to one of your
* teammates; {@code false} otherwise.
* @see #getTeammates()
* @see #broadcastMessage(Serializable)
* @see #sendMessage(String, Serializable)
*/
public boolean isTeammate(String name) {
if (peer != null) {
return ((ITeamRobotPeer) peer).isTeammate(name);
}
uninitializedException();
return false;
}
/**
* {@inheritDoc}
*/
public void onMessageReceived(MessageEvent event) {}
/**
* Sends a message to one (or more) teammates.
* <p/>
* Example:
* <pre>
* public void run() {
* sendMessage("sample.DroidBot", "I'm here!");
* }
* </pre>
*
* @param name the name of the intended recipient of the message
* @param message the message to send
* @throws IOException if the message could not be sent
* @see #isTeammate(String)
* @see #getTeammates()
* @see #broadcastMessage(Serializable)
*/
public void sendMessage(String name, Serializable message) throws IOException {
if (peer != null) {
((ITeamRobotPeer) peer).sendMessage(name, message);
} else {
uninitializedException();
}
}
}