More streaming fixups.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4106 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Ray Greenwell
2006-05-10 02:35:01 +00:00
parent b82108ecea
commit fe3350dc3c
11 changed files with 46 additions and 65 deletions
@@ -94,7 +94,7 @@ public class OccupantInfo
// documentation inherited from superinterface Streamable // documentation inherited from superinterface Streamable
public function readObject (ins :ObjectInputStream) :void public function readObject (ins :ObjectInputStream) :void
{ {
bodyOid = (ins.readObject() as Integer); bodyOid = (ins.readField(Integer) as Integer);
username = (ins.readObject() as Name); username = (ins.readObject() as Name);
status = ins.readByte(); status = ins.readByte();
} }
+14 -6
View File
@@ -31,12 +31,14 @@ public class ObjectInputStream
public function readObject () :Object public function readObject () :Object
//throws IOError //throws IOError
{ {
var DEBUG_ID :String = "[" + (++_tempy) + "] ";
try { try {
// read in the class code for this instance // read in the class code for this instance
var code :int = readShort(); var code :int = readShort();
// a zero code indicates a null value // a zero code indicates a null value
if (code == 0) { if (code == 0) {
Log.debug(DEBUG_ID + "Read null");
return null; return null;
} }
@@ -50,7 +52,7 @@ public class ObjectInputStream
// read in the class metadata // read in the class metadata
var cname :String = Translations.getFromServer(readUTF()); var cname :String = Translations.getFromServer(readUTF());
Log.debug("read cname: " + cname); // Log.debug("read cname: " + cname);
var streamer :Streamer = Streamer.getStreamerByJavaName(cname); var streamer :Streamer = Streamer.getStreamerByJavaName(cname);
if (streamer == Streamer.BAD_STREAMER) { if (streamer == Streamer.BAD_STREAMER) {
Log.warning("OMG, cannot stream " + cname); Log.warning("OMG, cannot stream " + cname);
@@ -60,10 +62,11 @@ public class ObjectInputStream
cmap = new ClassMapping(code, cname, streamer); cmap = new ClassMapping(code, cname, streamer);
_classMap[code] = cmap; _classMap[code] = cmap;
// Log.debug("Created mapping for (" + code + "): " + cname); Log.debug(DEBUG_ID +
"Created mapping: (" + code + "): " + cname);
} else { } else {
Log.debug("Read known code: " + code); Log.debug(DEBUG_ID + "Read known code: (" + code + ")");
cmap = (_classMap[code] as ClassMapping); cmap = (_classMap[code] as ClassMapping);
if (null == cmap) { if (null == cmap) {
throw new IOError("Read object for which we have no " + throw new IOError("Read object for which we have no " +
@@ -71,7 +74,7 @@ public class ObjectInputStream
} }
} }
Log.debug("Creating object sleeve..."); // Log.debug("Creating object sleeve...");
var target :Object; var target :Object;
if (cmap.streamer === null) { if (cmap.streamer === null) {
var clazz :Class = ClassUtil.getClassByName(cmap.classname); var clazz :Class = ClassUtil.getClassByName(cmap.classname);
@@ -80,9 +83,9 @@ public class ObjectInputStream
} else { } else {
target = cmap.streamer.createObject(this); target = cmap.streamer.createObject(this);
} }
Log.debug("Reading object..."); //Log.debug("Reading object...");
readBareObjectImpl(target, cmap.streamer); readBareObjectImpl(target, cmap.streamer);
Log.debug("Read object: " + target); Log.debug(DEBUG_ID + "Read object: " + target);
return target; return target;
} catch (me :MemoryError) { } catch (me :MemoryError) {
@@ -229,5 +232,10 @@ public class ObjectInputStream
/** A map of short class code to ClassMapping info. */ /** A map of short class code to ClassMapping info. */
protected var _classMap :Array = new Array(); protected var _classMap :Array = new Array();
static var _tempy :int = 0;
} }
} }
@@ -1,20 +0,0 @@
package com.threerings.io {
public dynamic class StreamableArray extends Array
implements Streamable
{
public function StreamableArray (ctype :Class = undefined, length :int = 0)
{
super(length);
_ctype = ctype;
}
public function StreamableArray (ctype :Class, ... values)
{
super(values);
_ctype = ctype;
}
/** The type of all the elements in the array. */
protected var _ctype :Class;
}
@@ -152,12 +152,6 @@ public class InvocationDirector
var event :InvocationRequestEvent = var event :InvocationRequestEvent =
new InvocationRequestEvent(invOid, invCode, methodId, args); new InvocationRequestEvent(invOid, invCode, methodId, args);
// because invocation directors are used on the server, we set the
// source oid here so that invocation requests are properly
// attributed to the right client object when created by
// server-side entities only sort of pretending to be a client
event.setSourceOid(_clobj.getOid());
// now, dispatch the event // now, dispatch the event
_omgr.postEvent(event); _omgr.postEvent(event);
} }
@@ -41,28 +41,6 @@ public /* abstract */ class DEvent
return false; return false;
} }
/**
* Returns the object id of the client that generated this event. If
* the event was generated by the server, the value returned will be
* -1. This is not valid on the client, it will return -1 for all
* events there (it is primarily provided to allow for event-level
* access control).
*/
public function getSourceOid () :int
{
return _soid;
}
/**
* Do not call this method. Sets the source oid of the client that
* generated this event. It is automatically called by the client
* management code when a client forwards an event to the server.
*/
public function setSourceOid (sourceOid :int) :void
{
_soid = sourceOid;
}
/** /**
* We want to make the notifyListener method visible to DObject. * We want to make the notifyListener method visible to DObject.
*/ */
@@ -120,9 +98,6 @@ public /* abstract */ class DEvent
/** The oid of the object that is the target of this event. */ /** The oid of the object that is the target of this event. */
protected var _toid :int; protected var _toid :int;
/** The oid of the client that generated this event. */
protected var _soid :int = -1;
protected static const UNSET_OLD_ENTRY :DSetEntry = new DummyEntry(); protected static const UNSET_OLD_ENTRY :DSetEntry = new DummyEntry();
} }
} }
@@ -103,6 +103,7 @@ public class DObject // extends EventDispatcher
public function postMessage (name :String, args :Array) :void public function postMessage (name :String, args :Array) :void
{ {
trace("posting message: " + name + ", " + args);
postEvent(new MessageEvent(_oid, name, args)); postEvent(new MessageEvent(_oid, name, args));
} }
@@ -242,7 +243,7 @@ public class DObject // extends EventDispatcher
protected function requestEntryAdd (name :String, entry :DSetEntry) :void protected function requestEntryAdd (name :String, entry :DSetEntry) :void
{ {
// dispatch an entry added event // dispatch an entry added event
postEvent(new EntryAddedEvent(_oid, name, entry, false)); postEvent(new EntryAddedEvent(_oid, name, entry));
} }
/** /**
@@ -27,7 +27,7 @@ public class EntryAddedEvent extends NamedEvent
* @param entry the entry to add to the set attribute. * @param entry the entry to add to the set attribute.
*/ */
public function EntryAddedEvent ( public function EntryAddedEvent (
targetOid :int, name :String, entry :DSetEntry) targetOid :int = 0, name :String = null, entry :DSetEntry = null)
{ {
super(targetOid, name); super(targetOid, name);
_entry = entry; _entry = entry;
@@ -29,11 +29,14 @@ public class EntryRemovedEvent extends NamedEvent
* @param oldEntry the previous value of the entry. * @param oldEntry the previous value of the entry.
*/ */
public function EntryRemovedEvent ( public function EntryRemovedEvent (
targetOid :int, name :String, key :Object, oldEntry :DSetEntry) targetOid :int = 0, name :String = null, key :Object = null,
oldEntry :DSetEntry = null)
{ {
super(targetOid, name); super(targetOid, name);
_key = key; _key = key;
_oldEntry = oldEntry; if (oldEntry != null) {
_oldEntry = oldEntry;
}
} }
/** /**
@@ -28,11 +28,14 @@ public class EntryUpdatedEvent extends NamedEvent
* @param oldEntry the previous value of the entry. * @param oldEntry the previous value of the entry.
*/ */
public function EntryUpdatedEvent ( public function EntryUpdatedEvent (
targetOid :int, name :String, entry :DSetEntry, oldEntry :DSetEntry) targetOid :int = 0, name :String = null, entry :DSetEntry = null,
oldEntry :DSetEntry = null)
{ {
super(targetOid, name); super(targetOid, name);
_entry = entry; _entry = entry;
_oldEntry = oldEntry; if (oldEntry != null) {
_oldEntry = oldEntry;
}
} }
/** /**
@@ -2,6 +2,7 @@ package com.threerings.presents.dobj {
import com.threerings.io.ObjectInputStream; import com.threerings.io.ObjectInputStream;
import com.threerings.io.ObjectOutputStream; import com.threerings.io.ObjectOutputStream;
import com.threerings.io.TypedArray;
import com.threerings.util.StringBuilder; import com.threerings.util.StringBuilder;
@@ -26,7 +27,8 @@ public class MessageEvent extends NamedEvent
* @param args the arguments for this message. This array should * @param args the arguments for this message. This array should
* contain only values of valid distributed object types. * contain only values of valid distributed object types.
*/ */
public function MessageEvent (targetOid :int, name :String, args :Array) public function MessageEvent (
targetOid :int = 0, name :String = null, args :Array = null)
{ {
super(targetOid, name); super(targetOid, name);
_args = args; _args = args;
@@ -76,6 +78,20 @@ public class MessageEvent extends NamedEvent
buf.append(", args=", _args); buf.append(", args=", _args);
} }
// documentation inherited
public override function writeObject (out :ObjectOutputStream) :void
{
super.writeObject(out);
out.writeField(_args);
}
// documentation inherited
public override function readObject (ins :ObjectInputStream) :void
{
super.readObject(ins);
_args = (ins.readField(Array) as Array);
}
protected var _args :Array; protected var _args :Array;
} }
} }
@@ -109,6 +109,7 @@ public class OidList
public function readObject (ins :ObjectInputStream) :void public function readObject (ins :ObjectInputStream) :void
{ {
_oids = (ins.readField("[I") as TypedArray); _oids = (ins.readField("[I") as TypedArray);
_oids.length = ins.readInt();
} }
public function toString () :String public function toString () :String