diff --git a/src/as/com/threerings/io/ObjectInputStream.as b/src/as/com/threerings/io/ObjectInputStream.as index a0df40323..420c72fee 100644 --- a/src/as/com/threerings/io/ObjectInputStream.as +++ b/src/as/com/threerings/io/ObjectInputStream.as @@ -159,10 +159,11 @@ public class ObjectInputStream return null; } - var streamer :Streamer = (type is Class) - ? Streamer.getStreamerByClass(type as Class) - : Streamer.getStreamerByJavaName(type as String); - + var jname :String = type as String; + if (type is Class) { + jname = Translations.getToServer(ClassUtil.getClassName(type)); + } + var streamer :Streamer = Streamer.getStreamerByJavaName(jname); if (streamer == null) { throw new Error("Cannot field stream " + type); } diff --git a/src/as/com/threerings/io/Streamer.as b/src/as/com/threerings/io/Streamer.as index 0ef6933d3..02ff7876c 100644 --- a/src/as/com/threerings/io/Streamer.as +++ b/src/as/com/threerings/io/Streamer.as @@ -42,39 +42,13 @@ public class Streamer { public static function getStreamer (obj :Object) :Streamer { + var jname :String; if (obj is TypedArray) { - return getStreamerByJavaName(TypedArray(obj).getJavaType()); + jname = TypedArray(obj).getJavaType(); } else { - return getStreamerByClass(ClassUtil.getClass(obj)); + jname = Translations.getToServer(ClassUtil.getClassName(obj)); } - } - - public static function getStreamerByClass (clazz :Class) :Streamer - { - initStreamers(); - - if (clazz === TypedArray) { - throw new Error("Broken, TODO"); - } - - var streamer :Streamer = _byClass[clazz] as Streamer; - if (streamer != null) { - return streamer; - } - - if (ClassUtil.isAssignableAs(Enum, clazz)) { - streamer = new EnumStreamer(clazz); - - } else if (ClassUtil.isAssignableAs(Streamable, clazz)) { - streamer = new Streamer(clazz); - - } else { - return null; - } - - // add the new streamer and return it - registerStreamer(streamer); - return streamer; + return getStreamerByJavaName(jname); } public static function getStreamerByJavaName (jname :String) :Streamer @@ -97,6 +71,9 @@ public class Streamer } else { // otherwise see if it represents a Streamable + // usually this is called from ObjectInputStream, but when it's called from + // ObjectOutputStream it's a bit annoying, because we started with a class/object. + // But: the code is smaller, so that wins var clazz :Class = ClassUtil.getClassByName(Translations.getFromServer(jname)); if (ClassUtil.isAssignableAs(Enum, clazz)) { @@ -131,14 +108,6 @@ public class Streamer return _jname; } - /** - * Return the Class identifying that which we stream, or null to not be registered. - */ - public function getClass () :Class - { - return _target; - } - public function writeObject (obj :Object, out :ObjectOutputStream) :void //throws IOError { @@ -161,11 +130,6 @@ public class Streamer protected static function registerStreamer (st :Streamer) :void { _byJName[st.getJavaClassName()] = st; - trace(": registered " + st.getJavaClassName()); - var c :Class = st.getClass(); - if (c != null) { - _byClass[c] = st; - } } /** @@ -179,7 +143,6 @@ public class Streamer return; } _byJName = new Dictionary(); - _byClass = new Dictionary(); for each (var c :Class in [ StringStreamer, NumberStreamer, ByteStreamer, IntegerStreamer, LongStreamer, FloatStreamer, ArrayStreamer, ByteArrayStreamer ]) { @@ -191,7 +154,6 @@ public class Streamer protected var _jname :String; - protected static var _byClass :Dictionary; protected static var _byJName :Dictionary; } } diff --git a/src/as/com/threerings/io/Translations.as b/src/as/com/threerings/io/Translations.as index 9b46f4912..e5dce552d 100644 --- a/src/as/com/threerings/io/Translations.as +++ b/src/as/com/threerings/io/Translations.as @@ -56,11 +56,12 @@ public class Translations // initialize some standard classes addTranslation("Object", "java.lang.Object"); addTranslation("String", "java.lang.String"); - addTranslation("flash.utils.ByteArray", "[B"); addTranslation("com.threerings.util.langBoolean", "java.lang.Boolean"); addTranslation("com.threerings.util.Byte", "java.lang.Byte"); addTranslation("com.threerings.util.Integer", "java.lang.Integer"); addTranslation("com.threerings.util.Long", "java.lang.Long"); addTranslation("com.threerings.util.Float", "java.lang.Float"); + addTranslation("Array", "[Ljava.lang.Object;"); + addTranslation("flash.utils.ByteArray", "[B"); } } diff --git a/src/as/com/threerings/io/streamers/ArrayStreamer.as b/src/as/com/threerings/io/streamers/ArrayStreamer.as index b14dab5cd..4c6a79492 100644 --- a/src/as/com/threerings/io/streamers/ArrayStreamer.as +++ b/src/as/com/threerings/io/streamers/ArrayStreamer.as @@ -66,13 +66,6 @@ public class ArrayStreamer extends Streamer } } - override public function getClass () :Class - { - // this is a little weird, but basically, we don't want to be registered for Array - // unless we're the basic Object array streamer. - return (_jname == "[Ljava.lang.Object;") ? Array : null; - } - override public function createObject (ins :ObjectInputStream) :Object { var ta :TypedArray = new TypedArray(_jname);