From ae6e3e883a037c656d534f2eb807ad64f7d72f7a Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Fri, 10 Oct 2008 22:43:55 +0000 Subject: [PATCH] Test throttle changing. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5433 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../presents/client/TestClient.java | 37 +++++++++++++++++-- .../presents/client/TestService.java | 13 ++++--- .../presents/data/TestMarshaller.java | 23 +++++++++--- .../presents/server/TestDispatcher.java | 17 +++++---- .../presents/server/TestManager.java | 19 ++++++++-- .../presents/server/TestProvider.java | 14 +++++-- .../presents/server/TestServer.java | 3 +- 7 files changed, 97 insertions(+), 29 deletions(-) diff --git a/tests/src/java/com/threerings/presents/client/TestClient.java b/tests/src/java/com/threerings/presents/client/TestClient.java index 817797a33..8a41a9670 100644 --- a/tests/src/java/com/threerings/presents/client/TestClient.java +++ b/tests/src/java/com/threerings/presents/client/TestClient.java @@ -31,6 +31,7 @@ import com.threerings.util.Name; import com.threerings.presents.data.TestObject; import com.threerings.presents.dobj.DEvent; import com.threerings.presents.dobj.EventListener; +import com.threerings.presents.dobj.MessageEvent; import com.threerings.presents.dobj.ObjectAccessException; import com.threerings.presents.dobj.Subscriber; import com.threerings.presents.net.UsernamePasswordCreds; @@ -49,12 +50,14 @@ public class TestClient _client = client; } + // from interface RunQueue public void postRunnable (Runnable run) { // queue it on up _queue.append(run); } + // from interface RunQueue public boolean isDispatchThread () { return _main == Thread.currentThread(); @@ -71,11 +74,13 @@ public class TestClient } } + // from interface SessionObserver public void clientWillLogon (Client client) { client.addServiceGroup("test"); } + // from interface SessionObserver public void clientDidLogon (Client client) { log.info("Client did logon [client=" + client + "]."); @@ -103,29 +108,50 @@ public class TestClient service.getTestOid(client, this); } + // from interface SessionObserver public void clientObjectDidChange (Client client) { log.info("Client object did change [client=" + client + "]."); } + // from interface SessionObserver public void clientDidLogoff (Client client) { log.info("Client did logoff [client=" + client + "]."); System.exit(0); } - public void objectAvailable (TestObject object) + // from interface Subscriber + public void objectAvailable (final TestObject object) { object.addListener(this); log.info("Object available: " + object); object.postMessage("lawl!"); // try blowing through our message limit - for (int ii = 0; ii < 15*Client.DEFAULT_MSGS_PER_SECOND; ii++) { + for (int ii = 0; ii < 4*Client.DEFAULT_MSGS_PER_SECOND; ii++) { object.postMessage("ZOMG!", new Integer(ii)); } + + // ask for the power + TestService service = _client.requireService(TestService.class); + service.giveMeThePower(_client, new TestService.ConfirmListener() { + public void requestProcessed () { + log.info("We have the power!"); + // now try blowing through our message limit again + for (int ii = 0; ii < 8*Client.DEFAULT_MSGS_PER_SECOND; ii++) { + object.postMessage("ZOMG!", new Integer(ii)); + } + // and finally shutdown + object.postMessage("shutdown"); + } + public void requestFailed (String cause) { + log.warning("Dang, no power! " + cause); + } + }); } + // from interface Subscriber public void requestFailed (int oid, ObjectAccessException cause) { log.info("Object unavailable [oid=" + oid + @@ -134,12 +160,15 @@ public class TestClient _client.logoff(true); } + // from interface EventListener public void eventReceived (DEvent event) { log.info("Got event [event=" + event + "]."); -// // request that we log off -// _client.logoff(true); + if (event instanceof MessageEvent && ((MessageEvent)event).getName().equals("shutdown")) { + // request that we log off + _client.logoff(true); + } } // documentation inherited from interface diff --git a/tests/src/java/com/threerings/presents/client/TestService.java b/tests/src/java/com/threerings/presents/client/TestService.java index dc226165d..0cf2cb835 100644 --- a/tests/src/java/com/threerings/presents/client/TestService.java +++ b/tests/src/java/com/threerings/presents/client/TestService.java @@ -21,7 +21,7 @@ package com.threerings.presents.client; -import java.util.ArrayList; +import java.util.List; /** * A test of the invocation services. @@ -35,10 +35,6 @@ public interface TestService extends InvocationService public void testSucceeded (String one, int two); } - /** Issues a test request. */ - public void test ( - Client client, String one, int two, ArrayList three, TestFuncListener listener); - /** Used to dispatch responses to {@link TestService#getTestOid} requests. */ public static interface TestOidListener extends InvocationListener { @@ -46,6 +42,13 @@ public interface TestService extends InvocationService public void gotTestOid (int testOid); } + /** Issues a test request. */ + public void test (Client client, String one, int two, List three, + TestFuncListener listener); + /** Issues a request for the test oid. */ public void getTestOid (Client client, TestOidListener listener); + + /** Tests upping the client's maximum message rate. */ + public void giveMeThePower (Client client, ConfirmListener listener); } diff --git a/tests/src/java/com/threerings/presents/data/TestMarshaller.java b/tests/src/java/com/threerings/presents/data/TestMarshaller.java index bf34861fc..0eca8fb93 100644 --- a/tests/src/java/com/threerings/presents/data/TestMarshaller.java +++ b/tests/src/java/com/threerings/presents/data/TestMarshaller.java @@ -21,11 +21,11 @@ package com.threerings.presents.data; -import java.util.ArrayList; - import com.threerings.presents.client.Client; +import com.threerings.presents.client.InvocationService; import com.threerings.presents.client.TestService; import com.threerings.presents.dobj.InvocationResponseEvent; +import java.util.List; /** * Provides the implementation of the {@link TestService} interface @@ -120,11 +120,24 @@ public class TestMarshaller extends InvocationMarshaller }); } - /** The method id used to dispatch {@link #test} requests. */ - public static final int TEST = 2; + /** The method id used to dispatch {@link #giveMeThePower} requests. */ + public static final int GIVE_ME_THE_POWER = 2; // from interface TestService - public void test (Client arg1, String arg2, int arg3, ArrayList arg4, TestService.TestFuncListener arg5) + public void giveMeThePower (Client arg1, InvocationService.ConfirmListener arg2) + { + InvocationMarshaller.ConfirmMarshaller listener2 = new InvocationMarshaller.ConfirmMarshaller(); + listener2.listener = arg2; + sendRequest(arg1, GIVE_ME_THE_POWER, new Object[] { + listener2 + }); + } + + /** The method id used to dispatch {@link #test} requests. */ + public static final int TEST = 3; + + // from interface TestService + public void test (Client arg1, String arg2, int arg3, List arg4, TestService.TestFuncListener arg5) { TestMarshaller.TestFuncMarshaller listener5 = new TestMarshaller.TestFuncMarshaller(); listener5.listener = arg5; diff --git a/tests/src/java/com/threerings/presents/server/TestDispatcher.java b/tests/src/java/com/threerings/presents/server/TestDispatcher.java index 6e6607220..f0e3aa78d 100644 --- a/tests/src/java/com/threerings/presents/server/TestDispatcher.java +++ b/tests/src/java/com/threerings/presents/server/TestDispatcher.java @@ -21,11 +21,11 @@ package com.threerings.presents.server; -import java.util.ArrayList; - +import com.threerings.presents.client.InvocationService; import com.threerings.presents.client.TestService; import com.threerings.presents.data.ClientObject; import com.threerings.presents.data.TestMarshaller; +import java.util.List; /** * Dispatches requests to the {@link TestProvider}. @@ -47,7 +47,6 @@ public class TestDispatcher extends InvocationDispatcher return new TestMarshaller(); } - @SuppressWarnings("unchecked") @Override // documentation inherited public void dispatchRequest ( ClientObject source, int methodId, Object[] args) @@ -56,15 +55,19 @@ public class TestDispatcher extends InvocationDispatcher switch (methodId) { case TestMarshaller.GET_TEST_OID: ((TestProvider)provider).getTestOid( - source, - (TestService.TestOidListener)args[0] + source, (TestService.TestOidListener)args[0] + ); + return; + + case TestMarshaller.GIVE_ME_THE_POWER: + ((TestProvider)provider).giveMeThePower( + source, (InvocationService.ConfirmListener)args[0] ); return; case TestMarshaller.TEST: ((TestProvider)provider).test( - source, - (String)args[0], ((Integer)args[1]).intValue(), (ArrayList)args[2], (TestService.TestFuncListener)args[3] + source, (String)args[0], ((Integer)args[1]).intValue(), (List)args[2], (TestService.TestFuncListener)args[3] ); return; diff --git a/tests/src/java/com/threerings/presents/server/TestManager.java b/tests/src/java/com/threerings/presents/server/TestManager.java index 6022a8e42..016428026 100644 --- a/tests/src/java/com/threerings/presents/server/TestManager.java +++ b/tests/src/java/com/threerings/presents/server/TestManager.java @@ -3,12 +3,15 @@ package com.threerings.presents.server; -import java.util.ArrayList; +import java.util.List; + +import com.google.inject.Inject; import com.samskivert.util.StringUtil; import com.threerings.presents.client.TestService; import com.threerings.presents.data.ClientObject; +import com.threerings.presents.server.ClientManager; import static com.threerings.presents.Log.log; @@ -32,8 +35,8 @@ public class TestManager } // from interface TestProvider - public void test (ClientObject caller, String one, int two, - ArrayList three, TestService.TestFuncListener listener) + public void test (ClientObject caller, String one, int two, List three, + TestService.TestFuncListener listener) throws InvocationException { log.info("Test request [one=" + one + ", two=" + two + @@ -42,4 +45,14 @@ public class TestManager // and issue a response to this invocation request listener.testSucceeded(one, two); } + + // from interface TestProvider + public void giveMeThePower (ClientObject caller, TestService.ConfirmListener listener) + { + log.info("Giving " + caller.who() + " the power!"); + _clmgr.getClient(caller.username).setIncomingMessageThrottle(20); + listener.requestProcessed(); + } + + @Inject protected ClientManager _clmgr; } diff --git a/tests/src/java/com/threerings/presents/server/TestProvider.java b/tests/src/java/com/threerings/presents/server/TestProvider.java index 55ea6b3d6..ea32f948d 100644 --- a/tests/src/java/com/threerings/presents/server/TestProvider.java +++ b/tests/src/java/com/threerings/presents/server/TestProvider.java @@ -21,10 +21,10 @@ package com.threerings.presents.server; -import java.util.ArrayList; - +import com.threerings.presents.client.InvocationService; import com.threerings.presents.client.TestService; import com.threerings.presents.data.ClientObject; +import java.util.List; /** * Defines the server-side of the {@link TestService}. @@ -34,12 +34,18 @@ public interface TestProvider extends InvocationProvider /** * Handles a {@link TestService#getTestOid} request. */ - public void getTestOid (ClientObject caller, TestService.TestOidListener arg1) + void getTestOid (ClientObject caller, TestService.TestOidListener arg1) + throws InvocationException; + + /** + * Handles a {@link TestService#giveMeThePower} request. + */ + void giveMeThePower (ClientObject caller, InvocationService.ConfirmListener arg1) throws InvocationException; /** * Handles a {@link TestService#test} request. */ - public void test (ClientObject caller, String arg1, int arg2, ArrayList arg3, TestService.TestFuncListener arg4) + void test (ClientObject caller, String arg1, int arg2, List arg3, TestService.TestFuncListener arg4) throws InvocationException; } diff --git a/tests/src/java/com/threerings/presents/server/TestServer.java b/tests/src/java/com/threerings/presents/server/TestServer.java index fa0f1060f..154ba8713 100644 --- a/tests/src/java/com/threerings/presents/server/TestServer.java +++ b/tests/src/java/com/threerings/presents/server/TestServer.java @@ -39,7 +39,8 @@ public class TestServer extends PresentsServer super.init(injector); // register our test provider - _invmgr.registerDispatcher(new TestDispatcher(new TestManager()), "test"); + _invmgr.registerDispatcher( + new TestDispatcher(injector.getInstance(TestManager.class)), "test"); // create a test object testobj = _omgr.registerObject(new TestObject());