package games.strategy.engine.message;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
/**
* The results of a method execution.
* Note that either one of m_rVal or m_exception will be null,
* since the method can either throw or return
*/
public class RemoteMethodCallResults implements Externalizable {
private static final long serialVersionUID = 4562274411264858613L;
private Object m_rVal;
// throwable implements Serializable
private Throwable m_exception;
public RemoteMethodCallResults() {}
public RemoteMethodCallResults(final Object rVal) {
m_rVal = rVal;
m_exception = null;
}
public RemoteMethodCallResults(final Throwable exception) {
m_rVal = null;
m_exception = exception;
}
public Throwable getException() {
return m_exception;
}
public Object getRVal() {
return m_rVal;
}
@Override
public void writeExternal(final ObjectOutput out) throws IOException {
if (m_rVal != null) {
out.write(1);
out.writeObject(m_rVal);
} else {
out.write(0);
out.writeObject(m_exception);
}
}
@Override
public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
final boolean rVal = in.read() == 1;
if (rVal) {
m_rVal = in.readObject();
} else {
m_exception = (Throwable) in.readObject();
}
}
}