StatModifier is Streamable, so that we can send stat updates from the game server to the world server

git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@689 c613c5cb-e716-0410-b11b-feb51c14d237
This commit is contained in:
Tom Conkling
2008-07-30 01:16:42 +00:00
parent 31d855837a
commit 3ac87296a6
3 changed files with 40 additions and 1 deletions
@@ -32,6 +32,11 @@ public class IntSetStatAdder extends StatModifier<IntSetStat>
_value = value;
}
/** Constructs an empty IntSetStatAdder (for Streaming purposes). */
public IntSetStatAdder ()
{
}
@Override // from StatModifier
public void modify (IntSetStat stat)
{
@@ -32,6 +32,11 @@ public class IntStatIncrementer extends StatModifier<IntStat>
_delta = delta;
}
/** Constructs an empty IntStatIncrementer (for Streaming purposes). */
public IntStatIncrementer ()
{
}
@Override // from StatModifier
public void modify (IntStat stat)
{
@@ -21,13 +21,20 @@
package com.threerings.stats.data;
import java.io.IOException;
import java.io.Serializable;
import com.threerings.io.NotStreamable;
import com.threerings.io.ObjectInputStream;
import com.threerings.io.ObjectOutputStream;
import com.threerings.io.Streamable;
/**
* Encapsulates a modification to a single stat that can be serialized and sent to a different
* server, if needed, to update stats loaded at runtime.
*/
public abstract class StatModifier<T extends Stat> implements Serializable
public abstract class StatModifier<T extends Stat>
implements Serializable, Streamable
{
/**
* Creates a modifier that will operate on the supplied stat type. Note that this type may be
@@ -38,6 +45,11 @@ public abstract class StatModifier<T extends Stat> implements Serializable
_type = type;
}
/** Constructs an empty StatModifier (for Streaming purposes). */
protected StatModifier ()
{
}
/**
* Returns the {@link Stat.Type} of the stat being modified.
*/
@@ -46,11 +58,28 @@ public abstract class StatModifier<T extends Stat> implements Serializable
return _type;
}
/** Writes our custom streamable fields. */
public void writeObject (ObjectOutputStream out)
throws IOException
{
out.writeInt(_type.code());
out.defaultWriteObject();
}
/** Reads our custom streamable fields. */
public void readObject (ObjectInputStream in)
throws IOException, ClassNotFoundException
{
_type = Stat.getType(in.readInt());
in.defaultReadObject();
}
/**
* Applies the modification to the stat in question.
*/
public abstract void modify (T stat);
/** The type of the stat on which we're operating. */
@NotStreamable
protected Stat.Type _type;
}