Throttle datagrams as well as streamed messages.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5974 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -40,6 +40,7 @@ import java.nio.channels.SocketChannel;
|
||||
import com.samskivert.util.LoopingThread;
|
||||
import com.samskivert.util.Queue;
|
||||
import com.samskivert.util.StringUtil;
|
||||
import com.samskivert.util.Throttle;
|
||||
|
||||
import com.threerings.io.ByteBufferInputStream;
|
||||
import com.threerings.io.ByteBufferOutputStream;
|
||||
@@ -526,6 +527,23 @@ public class BlockingCommunicator extends Communicator
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Throttles an outgoing message operation in a thread-safe manner.
|
||||
*/
|
||||
protected void throttleOutgoingMessage ()
|
||||
{
|
||||
Throttle throttle = _client.getOutgoingMessageThrottle();
|
||||
synchronized(throttle) {
|
||||
while (throttle.throttleOp()) {
|
||||
try {
|
||||
Thread.sleep(2);
|
||||
} catch (InterruptedException ie) {
|
||||
// no problem
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The reader encapsulates the authentication and message reading process. It calls back to the
|
||||
* {@link Communicator} class to do things, but the general flow of the reader thread is
|
||||
@@ -681,13 +699,7 @@ public class BlockingCommunicator extends Communicator
|
||||
}
|
||||
|
||||
// make sure we're not exceeding our outgoing throttle rate
|
||||
while (_client.getOutgoingMessageThrottle().throttleOp()) {
|
||||
try {
|
||||
Thread.sleep(2);
|
||||
} catch (InterruptedException ie) {
|
||||
// no problem
|
||||
}
|
||||
}
|
||||
throttleOutgoingMessage();
|
||||
|
||||
try {
|
||||
// write the message out the socket
|
||||
@@ -892,6 +904,9 @@ public class BlockingCommunicator extends Communicator
|
||||
return;
|
||||
}
|
||||
|
||||
// make sure we're not exceeding our outgoing throttle rate
|
||||
throttleOutgoingMessage();
|
||||
|
||||
try {
|
||||
// write the message out the socket
|
||||
sendDatagram(msg);
|
||||
|
||||
Reference in New Issue
Block a user