diff --git a/src/as/com/threerings/presents/client/Client.as b/src/as/com/threerings/presents/client/Client.as index bb61a8bc4..caac57e9a 100644 --- a/src/as/com/threerings/presents/client/Client.as +++ b/src/as/com/threerings/presents/client/Client.as @@ -414,8 +414,14 @@ public class Client extends EventDispatcher internal function setOutgoingMessageThrottle (messagesPerSec :int) :void { + _comm.postMessage(new ThrottleUpdatedMessage(messagesPerSec)); + } + + internal function finalizeOutgoingMessageThrottle (messagesPerSec :int) :void + { + // when the throttle update message goes out to the server _outThrottle.reinit(messagesPerSec, 1000); - _comm.postMessage(new ThrottleUpdatedMessage()); + log.info("Updated outgoing throttle", "messagesPerSec", messagesPerSec); } internal function getOutgoingMessageThrottle () :Throttle diff --git a/src/as/com/threerings/presents/client/Communicator.as b/src/as/com/threerings/presents/client/Communicator.as index 07d7b8dc7..c1888d7c2 100644 --- a/src/as/com/threerings/presents/client/Communicator.as +++ b/src/as/com/threerings/presents/client/Communicator.as @@ -45,6 +45,7 @@ import com.threerings.presents.net.AuthResponseData; import com.threerings.presents.net.DownstreamMessage; import com.threerings.presents.net.LogoffRequest; import com.threerings.presents.net.UpstreamMessage; +import com.threerings.presents.net.ThrottleUpdatedMessage; public class Communicator { @@ -192,6 +193,8 @@ public class Communicator // if this was a logoff request, shutdown if (msg is LogoffRequest) { shutdown(null); + } else if (msg is ThrottleUpdatedMessage) { + _client.finalizeOutgoingMessageThrottle(ThrottleUpdatedMessage(msg).messagesPerSec); } } } diff --git a/src/as/com/threerings/presents/net/ThrottleUpdatedMessage.as b/src/as/com/threerings/presents/net/ThrottleUpdatedMessage.as index 654fcffe8..74b70bd70 100644 --- a/src/as/com/threerings/presents/net/ThrottleUpdatedMessage.as +++ b/src/as/com/threerings/presents/net/ThrottleUpdatedMessage.as @@ -21,10 +21,25 @@ package com.threerings.presents.net { +import com.threerings.io.ObjectOutputStream; + /** * Notifies the server that the client has received its UpdateThrottleMessage. */ public class ThrottleUpdatedMessage extends UpstreamMessage { + /** The number of messages allowed per second. */ + public var messagesPerSec :int; + + public function ThrottleUpdatedMessage (messagesPerSec :int = 0) + { + this.messagesPerSec = messagesPerSec; + } + + override public function writeObject (outs :ObjectOutputStream) :void + { + super.writeObject(outs); + outs.writeInt(messagesPerSec); + } } } diff --git a/src/java/com/threerings/presents/net/ThrottleUpdatedMessage.java b/src/java/com/threerings/presents/net/ThrottleUpdatedMessage.java index c7c63b2ee..1e4964d39 100644 --- a/src/java/com/threerings/presents/net/ThrottleUpdatedMessage.java +++ b/src/java/com/threerings/presents/net/ThrottleUpdatedMessage.java @@ -26,5 +26,19 @@ package com.threerings.presents.net; */ public class ThrottleUpdatedMessage extends UpstreamMessage { - // nothing needed + /** The number of messages allowed per second. */ + public final int messagesPerSec; + + /** + * Zero argument constructor used when unserializing an instance. + */ + public ThrottleUpdatedMessage () + { + this.messagesPerSec = 0; + } + + public ThrottleUpdatedMessage (int messagesPerSec) + { + this.messagesPerSec = messagesPerSec; + } }