/*******************************************************************************
* 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:
* Pavel Savara
* - Initial implementation
*******************************************************************************/
package net.sf.robocode.peer;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import net.sf.robocode.serialization.ISerializableHelper;
import net.sf.robocode.serialization.RbSerializer;
import robocode.Event;
import robocode.RobotStatus;
public class ExecResults implements Serializable {
private static final long serialVersionUID = 1L;
private ExecCommands commands;
private RobotStatus status;
private List<Event> events;
private List<TeamMessage> teamMessages;
private List<BulletStatus> projectileUpdates;
private boolean halt;
private boolean shouldWait;
private boolean paintEnabled;
public ExecResults(ExecCommands commands, RobotStatus status, List<Event> events, List<TeamMessage> teamMessages, List<BulletStatus> bulletUpdates, boolean halt, boolean shouldWait, boolean paintEnabled) {
this.commands = commands;
this.status = status;
this.events = events;
this.teamMessages = teamMessages;
this.projectileUpdates = bulletUpdates;
this.halt = halt;
this.shouldWait = shouldWait;
this.paintEnabled = paintEnabled;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public ExecCommands getCommands() {
return commands;
}
public void setCommands(ExecCommands commands) {
this.commands = commands;
}
public RobotStatus getStatus() {
return status;
}
public void setStatus(RobotStatus status) {
this.status = status;
}
public List<Event> getEvents() {
return events;
}
public void setEvents(List<Event> events) {
this.events = events;
}
public List<TeamMessage> getTeamMessages() {
return teamMessages;
}
public void setTeamMessages(List<TeamMessage> teamMessages) {
this.teamMessages = teamMessages;
}
public List<BulletStatus> getProjectileUpdates() {
return projectileUpdates;
}
public void setBulletUpdates(List<BulletStatus> projUpdates) {
this.projectileUpdates = projUpdates;
}
public boolean isHalt() {
return halt;
}
public void setHalt(boolean halt) {
this.halt = halt;
}
public boolean isShouldWait() {
return shouldWait;
}
public void setShouldWait(boolean shouldWait) {
this.shouldWait = shouldWait;
}
public boolean isPaintEnabled() {
return paintEnabled;
}
public void setPaintEnabled(boolean paintEnabled) {
this.paintEnabled = paintEnabled;
}
private ExecResults() {}
static ISerializableHelper createHiddenSerializer() {
return new SerializableHelper();
}
private static class SerializableHelper implements ISerializableHelper {
@SuppressWarnings({ "PointlessArithmeticExpression"})
public int sizeOf(RbSerializer serializer, Object object) {
ExecResults obj = (ExecResults) object;
int size = RbSerializer.SIZEOF_TYPEINFO + 3 * RbSerializer.SIZEOF_BOOL;
size += serializer.sizeOf(RbSerializer.ExecCommands_TYPE, obj.commands);
size += serializer.sizeOf(RbSerializer.RobotStatus_TYPE, obj.status);
// events
for (Event event : obj.events) {
size += serializer.sizeOf(event);
}
size += 1;
// messages
for (TeamMessage m : obj.teamMessages) {
size += serializer.sizeOf(RbSerializer.TeamMessage_TYPE, m);
}
size += 1;
// bullets
for (BulletStatus b : obj.projectileUpdates) {
size += serializer.sizeOf(RbSerializer.BulletStatus_TYPE, b);
}
size += 1;
return size;
}
public void serialize(RbSerializer serializer, ByteBuffer buffer, Object object) {
ExecResults obj = (ExecResults) object;
serializer.serialize(buffer, obj.halt);
serializer.serialize(buffer, obj.shouldWait);
serializer.serialize(buffer, obj.paintEnabled);
serializer.serialize(buffer, RbSerializer.ExecCommands_TYPE, obj.commands);
serializer.serialize(buffer, RbSerializer.RobotStatus_TYPE, obj.status);
for (Event event : obj.events) {
serializer.serialize(buffer, event);
}
buffer.put(RbSerializer.TERMINATOR_TYPE);
for (TeamMessage message : obj.teamMessages) {
serializer.serialize(buffer, RbSerializer.TeamMessage_TYPE, message);
}
buffer.put(RbSerializer.TERMINATOR_TYPE);
for (BulletStatus bulletStatus : obj.projectileUpdates) {
serializer.serialize(buffer, RbSerializer.BulletStatus_TYPE, bulletStatus);
}
buffer.put(RbSerializer.TERMINATOR_TYPE);
}
public Object deserialize(RbSerializer serializer, ByteBuffer buffer) {
ExecResults res = new ExecResults();
res.halt = serializer.deserializeBoolean(buffer);
res.shouldWait = serializer.deserializeBoolean(buffer);
res.paintEnabled = serializer.deserializeBoolean(buffer);
res.commands = (ExecCommands) serializer.deserializeAny(buffer);
res.status = (RobotStatus) serializer.deserializeAny(buffer);
res.events = new ArrayList<Event>();
res.teamMessages = new ArrayList<TeamMessage>();
res.projectileUpdates = new ArrayList<BulletStatus>();
Object item = serializer.deserializeAny(buffer);
while (item != null) {
if (item instanceof Event) {
res.events.add((Event) item);
}
item = serializer.deserializeAny(buffer);
}
item = serializer.deserializeAny(buffer);
while (item != null) {
if (item instanceof TeamMessage) {
res.teamMessages.add((TeamMessage) item);
}
item = serializer.deserializeAny(buffer);
}
item = serializer.deserializeAny(buffer);
while (item != null) {
if (item instanceof BulletStatus) {
res.projectileUpdates.add((BulletStatus) item);
}
item = serializer.deserializeAny(buffer);
}
return res;
}
}
}