diff --git a/src/as/com/threerings/crowd/chat/client/ChatDirector.as b/src/as/com/threerings/crowd/chat/client/ChatDirector.as index 0213d8356..7a73ea8a5 100644 --- a/src/as/com/threerings/crowd/chat/client/ChatDirector.as +++ b/src/as/com/threerings/crowd/chat/client/ChatDirector.as @@ -36,6 +36,7 @@ import com.threerings.presents.dobj.DObject; import com.threerings.presents.dobj.MessageEvent; import com.threerings.presents.dobj.MessageListener; +import com.threerings.util.Long; import com.threerings.util.MessageBundle; import com.threerings.util.MessageManager; import com.threerings.util.Name; @@ -441,7 +442,7 @@ public class ChatDirector extends BasicDirector } }; var success :Function = function ( - idleTime :long, awayMessage :String) :void + idleTime :Long, awayMessage :String) :void { var feedback :String = xlate(_bundle, MessageBundle.tcompose( "m.told_format", target, message)); diff --git a/src/as/com/threerings/crowd/chat/client/TellAdapter.as b/src/as/com/threerings/crowd/chat/client/TellAdapter.as index ee1576cfc..41e47dbea 100644 --- a/src/as/com/threerings/crowd/chat/client/TellAdapter.as +++ b/src/as/com/threerings/crowd/chat/client/TellAdapter.as @@ -1,6 +1,6 @@ package com.threerings.crowd.chat.client { -import com.threerings.util.long; +import com.threerings.util.Long; import com.threerings.presents.client.InvocationAdapter; @@ -14,7 +14,7 @@ public class TellAdapter extends InvocationAdapter } // documentation inherited from interface TellListener - public function tellSucceeded (idleTime :long, awayMsg :String) :void + public function tellSucceeded (idleTime :Long, awayMsg :String) :void { _successFunc(idleTime, awayMsg); } diff --git a/src/as/com/threerings/crowd/chat/client/TellListener.as b/src/as/com/threerings/crowd/chat/client/TellListener.as index 72baca6c2..70e433b4e 100644 --- a/src/as/com/threerings/crowd/chat/client/TellListener.as +++ b/src/as/com/threerings/crowd/chat/client/TellListener.as @@ -1,11 +1,11 @@ package com.threerings.crowd.chat.client { -import com.threerings.util.long; +import com.threerings.util.Long; import com.threerings.presents.client.InvocationListener public interface TellListener extends InvocationListener { - function tellSucceeded (idleTime :long, awayMessage :String) :void; + function tellSucceeded (idleTime :Long, awayMessage :String) :void; } } diff --git a/src/as/com/threerings/crowd/client/BodyService.as b/src/as/com/threerings/crowd/client/BodyService.as new file mode 100644 index 000000000..a1b7895e9 --- /dev/null +++ b/src/as/com/threerings/crowd/client/BodyService.as @@ -0,0 +1,38 @@ +// +// $Id: BodyService.java 3098 2004-08-27 02:12:55Z mdb $ +// +// Narya library - tools for developing networked games +// Copyright (C) 2002-2004 Three Rings Design, Inc., All Rights Reserved +// http://www.threerings.net/code/narya/ +// +// This library is free software; you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +package com.threerings.crowd.client { + +import com.threerings.presents.client.Client; +import com.threerings.presents.client.InvocationService; + +/** + * The client side of the body-related invocation services. + */ +public interface BodyService extends InvocationService +{ + /** + * Requests to set the idle state of the client to the specified + * value. + */ + function setIdle (client :Client, idle :Boolean) :void; +} +} diff --git a/src/as/com/threerings/crowd/data/BodyMarshaller.as b/src/as/com/threerings/crowd/data/BodyMarshaller.as new file mode 100644 index 000000000..019b4556a --- /dev/null +++ b/src/as/com/threerings/crowd/data/BodyMarshaller.as @@ -0,0 +1,49 @@ +// +// $Id$ +// +// Narya library - tools for developing networked games +// Copyright (C) 2002-2005 Three Rings Design, Inc., All Rights Reserved +// http://www.threerings.net/code/narya/ +// +// This library is free software; you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +package com.threerings.crowd.data { + +import com.threerings.crowd.client.BodyService; +import com.threerings.presents.client.Client; +import com.threerings.presents.data.InvocationMarshaller; +import com.threerings.presents.dobj.InvocationResponseEvent; + +/** + * Provides the implementation of the {@link BodyService} interface + * that marshalls the arguments and delivers the request to the provider + * on the server. Also provides an implementation of the response listener + * interfaces that marshall the response arguments and deliver them back + * to the requesting client. + */ +public class BodyMarshaller extends InvocationMarshaller + implements BodyService +{ + /** The method id used to dispatch {@link #setIdle} requests. */ + public static const SET_IDLE :int = 1; + + // documentation inherited from interface + public function setIdle (arg1 :Client, arg2 :Boolean) :void + { + sendRequest(arg1, SET_IDLE, [ arg2 ]); + } + +} +} diff --git a/src/as/com/threerings/crowd/data/LocationMarshaller.as b/src/as/com/threerings/crowd/data/LocationMarshaller.as new file mode 100644 index 000000000..efeab9cd5 --- /dev/null +++ b/src/as/com/threerings/crowd/data/LocationMarshaller.as @@ -0,0 +1,61 @@ +// +// $Id: LocationMarshaller.java 3793 2005-12-21 02:12:57Z ray $ +// +// Narya library - tools for developing networked games +// Copyright (C) 2002-2005 Three Rings Design, Inc., All Rights Reserved +// http://www.threerings.net/code/narya/ +// +// This library is free software; you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +package com.threerings.crowd.data { + +import com.threerings.crowd.client.LocationService; +import com.threerings.crowd.client.MoveListener; +import com.threerings.crowd.data.PlaceConfig; +import com.threerings.presents.client.Client; +import com.threerings.presents.data.InvocationMarshaller; +import com.threerings.presents.dobj.InvocationResponseEvent; + +/** + * Provides the implementation of the {@link LocationService} interface + * that marshalls the arguments and delivers the request to the provider + * on the server. Also provides an implementation of the response listener + * interfaces that marshall the response arguments and deliver them back + * to the requesting client. + */ +public class LocationMarshaller extends InvocationMarshaller + implements LocationService +{ + /** The method id used to dispatch {@link #leavePlace} requests. */ + public static const LEAVE_PLACE :int = 1; + + // documentation inherited from interface + public function leavePlace (arg1 :Client) :void + { + sendRequest(arg1, LEAVE_PLACE, new Array()); + } + + /** The method id used to dispatch {@link #moveTo} requests. */ + public static const MOVE_TO :int = 2; + + // documentation inherited from interface + public function moveTo (arg1 :Client, arg2 :int, arg3 :MoveListener) :void + { + var listener3 :MoveMarshaller = new MoveMarshaller(); + listener3.listener = arg3; + sendRequest(arg1, MOVE_TO, [ arg2, listener3 ]); + } +} +} diff --git a/src/as/com/threerings/crowd/data/MoveMarshaller.as b/src/as/com/threerings/crowd/data/MoveMarshaller.as new file mode 100644 index 000000000..ba94816e1 --- /dev/null +++ b/src/as/com/threerings/crowd/data/MoveMarshaller.as @@ -0,0 +1,27 @@ +package com.threerings.crowd.data { + +import com.threerings.presents.data.ListenerMarshaller; + +import com.threerings.crowd.client.MoveListener + +public class MoveMarshaller extends ListenerMarshaller +{ + /** The method id used to dispatch {@link #moveSucceeded} + * responses. */ + public static const MOVE_SUCCEEDED :int = 1; + + // documentation inherited + public override function dispatchResponse (methodId :int, args :Array) :void + { + switch (methodId) { + case MOVE_SUCCEEDED: + (listener as MoveListener).moveSucceeded( + (args[0] as PlaceConfig)); + return; + + default: + super.dispatchResponse(methodId, args); + } + } +} +} diff --git a/src/as/com/threerings/io/Streamer.as b/src/as/com/threerings/io/Streamer.as index 09c6db579..b0ffae7c6 100644 --- a/src/as/com/threerings/io/Streamer.as +++ b/src/as/com/threerings/io/Streamer.as @@ -11,6 +11,7 @@ import com.threerings.io.streamers.ByteyStreamer; import com.threerings.io.streamers.ByteArrayStreamer; import com.threerings.io.streamers.FloatStreamer; import com.threerings.io.streamers.IntegerStreamer; +import com.threerings.io.streamers.LongStreamer; import com.threerings.io.streamers.NumberStreamer; import com.threerings.io.streamers.ObjectArrayStreamer; import com.threerings.io.streamers.ShortStreamer; @@ -136,6 +137,7 @@ public class Streamer new ByteStreamer(), new ShortStreamer(), new IntegerStreamer(), + new LongStreamer(), new FloatStreamer() ]; } diff --git a/src/as/com/threerings/io/streamers/LongStreamer.as b/src/as/com/threerings/io/streamers/LongStreamer.as new file mode 100644 index 000000000..2d150799e --- /dev/null +++ b/src/as/com/threerings/io/streamers/LongStreamer.as @@ -0,0 +1,40 @@ +package com.threerings.io.streamers { + +import com.threerings.util.Long; + +import com.threerings.io.ObjectInputStream; +import com.threerings.io.ObjectOutputStream; +import com.threerings.io.Streamer; + +/** + * A Streamer for Long objects. + */ +public class LongStreamer extends Streamer +{ + public function LongStreamer () + { + super(Long, "java.lang.Long"); + } + + public override function createObject (ins :ObjectInputStream) :Object + { + return new Long(0); + } + + public override function writeObject (obj :Object, out :ObjectOutputStream) + :void + { + var longy :Long = (obj as Long); + out.writeInt(longy.low); + out.writeInt(longy.high); + } + + public override function readObject (obj :Object, ins :ObjectInputStream) + :void + { + var longy :Long = (obj as Long); + longy.low = ins.readInt(); + longy.high = ins.readInt(); + } +} +} diff --git a/src/as/com/threerings/msoy/client/MsoyClient.as b/src/as/com/threerings/msoy/client/MsoyClient.as index 7b85d7334..2614c7737 100644 --- a/src/as/com/threerings/msoy/client/MsoyClient.as +++ b/src/as/com/threerings/msoy/client/MsoyClient.as @@ -7,7 +7,6 @@ import mx.collections.ArrayCollection; import com.threerings.util.Name; import com.threerings.presents.Log; import com.threerings.presents.client.Client; -import com.threerings.presents.data.TimeBaseMarshaller; import com.threerings.presents.dobj.DSet; import com.threerings.presents.dobj.QSet; import com.threerings.presents.net.UsernamePasswordCreds; @@ -16,6 +15,12 @@ import com.threerings.presents.dobj.DObjectManager; import com.threerings.presents.net.BootstrapData; +// imported so that they'll be compiled into the .swf +import com.threerings.presents.data.TimeBaseMarshaller; +import com.threerings.crowd.data.BodyMarshaller; +import com.threerings.crowd.data.LocationMarshaller; +import com.threerings.crowd.chat.data.ChatMarshaller; + public class MsoyClient extends Client { @@ -32,6 +37,9 @@ public class MsoyClient extends Client public function fuckingCompiler () :void { var i :int = TimeBaseMarshaller.GET_TIME_OID; + i = LocationMarshaller.LEAVE_PLACE; + i = BodyMarshaller.SET_IDLE; + i = ChatMarshaller.AWAY; } protected var _ctx :MsoyContext; diff --git a/src/as/com/threerings/presents/net/PongResponse.as b/src/as/com/threerings/presents/net/PongResponse.as index 32b9219ba..190e3e81d 100644 --- a/src/as/com/threerings/presents/net/PongResponse.as +++ b/src/as/com/threerings/presents/net/PongResponse.as @@ -1,6 +1,6 @@ package com.threerings.presents.net { -import com.threerings.util.long; +import com.threerings.util.Long; import com.threerings.io.ObjectInputStream; import com.threerings.io.ObjectOutputStream; @@ -13,7 +13,7 @@ public class PongResponse extends DownstreamMessage super(); } - public function getPackStamp () :long + public function getPackStamp () :Long { return _packStamp; } @@ -34,13 +34,13 @@ public class PongResponse extends DownstreamMessage super.readObject(ins); // TODO: Figure out how we're really going to cope with longs - _packStamp = new long(0); - _packStamp.readObject(ins); + _packStamp = new Long(0); + ins.readBareObject(_packStamp); _processDelay = ins.readInt(); } - protected var _packStamp :long; + protected var _packStamp :Long; protected var _processDelay :int; diff --git a/src/as/com/threerings/util/Long.as b/src/as/com/threerings/util/Long.as new file mode 100644 index 000000000..77c1ba877 --- /dev/null +++ b/src/as/com/threerings/util/Long.as @@ -0,0 +1,28 @@ +package com.threerings.util { + +/** + * Equivalent to java.lang.Long. + */ +public class Long + implements Equalable +{ + public var high :int; + public var low :int; + + public function Long (low :int, high :int = 0) + { + this.low = low; + this.high = high; + } + + // documentation inherited from interface Equalable + public function equals (other :Object) :Boolean + { + if (!(other is Long)) { + return false; + } + var that :Long = (other as Long); + return (this.high == that.high) && (this.low == that.low); + } +} +} diff --git a/src/as/com/threerings/util/long.as b/src/as/com/threerings/util/long.as deleted file mode 100644 index 790fedc43..000000000 --- a/src/as/com/threerings/util/long.as +++ /dev/null @@ -1,39 +0,0 @@ -package com.threerings.util { - -import com.threerings.io.ObjectInputStream; -import com.threerings.io.ObjectOutputStream; -import com.threerings.io.Streamable; - - -/** - * TODO: stuff. - */ -public class long extends Object - implements Streamable -{ - public function long (lowbits :int, highbits :int = 0) - { - _lowbits = lowbits; - _highbits = highbits; - } - - // documentation inherited from interface Streamable - public function writeObject (out :ObjectOutputStream) :void - //throws IOError - { - out.writeInt(_highbits); - out.writeInt(_lowbits); - } - - // documentation inherited from interface Streamable - public function readObject (ins :ObjectInputStream) :void - //throws IOError - { - _highbits = ins.readInt(); - _lowbits = ins.readInt(); - } - - /** Yon bits. */ - protected var _lowbits :int, _highbits :int; -} -}