Commit Graph

33 Commits

Author SHA1 Message Date
Andrzej Kapolka f9ce9f6939 On second thought, let's configure the standalone client reference via an
optional injection.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6414 542714f4-19e9-0310-aa3c-eee0fc999fb1
2011-01-05 02:03:25 +00:00
Andrzej Kapolka 0c28d31357 Initializing the invocation director reference on deserialization doesn't work
well in standalone mode.  We need a way to install a director on registration.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6413 542714f4-19e9-0310-aa3c-eee0fc999fb1
2011-01-05 01:32:13 +00:00
Andrzej Kapolka 49c6511fd1 Because getInterfaces only returns the interfaces implemented by the class
(not by its superclasses), we need to rise through its superclasses as well
in order to find the provider interface.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6411 542714f4-19e9-0310-aa3c-eee0fc999fb1
2011-01-04 22:46:22 +00:00
Ray Greenwell bfd1f79107 Bugfix: we need to examine methods from superclasses as well.
ProjectXZoneRegistry extends a class that is a ZoneProvider...


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6409 542714f4-19e9-0310-aa3c-eee0fc999fb1
2011-01-03 21:17:55 +00:00
Andrzej Kapolka 55d1df93a1 Avoid ArrayIndexOutOfBoundsException.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6408 542714f4-19e9-0310-aa3c-eee0fc999fb1
2011-01-01 21:52:23 +00:00
Dave Hoover 02899d1083 Auld Lang Syne
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6407 542714f4-19e9-0310-aa3c-eee0fc999fb1
2011-01-01 05:02:21 +00:00
Michael Bayne 97be2d9fc7 These guys are no longer needed.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6405 542714f4-19e9-0310-aa3c-eee0fc999fb1
2011-01-01 01:32:34 +00:00
Michael Bayne f8c7241f9f Switched providers to new dynamic dispatching.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6404 542714f4-19e9-0310-aa3c-eee0fc999fb1
2011-01-01 01:31:20 +00:00
Michael Bayne 5a67aa906b A while ago, I put on my todo list: "look into changing InvocationService to
use JVM generated proxies, nix marshaller/dispatcher."

The idea was to use Proxy.newProxyInstance to magically create (at runtime)
proxies for FooService interfaces instead of generating a bunch of boilerplate
code. I figured something similar could be done for FooDispatcher on the server
side.

However, we also generate C++ and ActionScript marshallers, and those aren't
ever going away (AS might support some sort of dynamic magic to do what we
need, but C++ sure don't). So I decided to leave the marshaller side of things
as is.

I did revamp the dispatcher side of things to eliminate the need for
FooDispatcher on the server. This turned out not to even require the use of
something so magical as java.lang.reflect.Proxy, because in this case we're
just reading in method ids over the network (and arguments), and calling the
appropriate method. Such mundane activities are easily accomplished with the
regular reflection API.

The existing dispatcher stuff still works as well, of course, and though the
conversion from the old style to the new style is pretty simple:

< invmgr.registerDispatcher(new FooDispatcher(fooprov))
> invmgr.registerProvider(fooprov, FooMarshaller.class)

there's no burning need to convert things over. Fortunately, there's no
(compatibility) impact on client projects to converting Narya and Vilya, so
I'll be doing that shortly. There will be a miniscule performance impact, but I
think the cost of a single reflective method call, given that all of its
arguments were read and unmarshalled from the network, will be a good distance
south of immaterial.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6403 542714f4-19e9-0310-aa3c-eee0fc999fb1
2011-01-01 01:29:26 +00:00
Michael Bayne 36a98f8794 Removed the need to supply a Client reference when making invocation service
calls on the Java side, to match this added convenience we introduced to the
ActionScript side some time ago.

Before arms are raised into the air and waved like they really do care, bear
the following in mind:

Nothing will change at all on your project until you take some action to do so.
That action could include any of the following:

1. Continue to use narya-tools-1.2 to run genservice and you'll get the old
style "pass a Client reference for every service method invocation" marshallers
and you can continue to live happily in the past.

2. Leave some of your stuff un-regenerated, but generate new stuff using the
new tools and use the Client-reference-free style for new services. This is
likely to engender some PITA if you're trying to use both styles in the same
project because genservice just wants to operate on everything, but I offer it
as an option in case some other PITA motivates the tolerance of this
(presumably smaller) PITA.

3. Embrace the brave new world of simplicity and wield your good friend sed for
fun and profit:

(make necessary build.xml updates to start using narya-tools-1.4-SNAPSHOT)

% find src -name '*Service.java' | xargs sed -i 's:Client client, ::g'
(this will remove the Client argument from most of your services, some manual
fixes may be needed)

% ant genservice

% find src -name '*.java' | xargs sed -i 's:_ctx.getClient(), ::g'
(this will fix most of the places that pass a client reference into an
invocation service, some manual fixes will probably be needed)

I did this on Vilya and it magically took care of like 95% of the places where
changes were needed. The remaining half dozen changes were painless. Clearly
something like Yohoho vastly dwarfs Vilya in scope, but someone looking for an
hour or two of mindless typing to distract them on a lazy Sunday afternoon
would likely breeze through even that vast codebase without breaking a sweat.

Two more notes:

1. I'm going to switch Narya and Vilya over to the new style, and I'll be
fixing all the projects that use their services.

2. I lied (a teeny bit) about nothing changing. I made the old Client-taking
sendRequest methods deprecated, so projects that don't switch to the new style
will be presented with a large number of deprecation warnings. If this is too
terrible a burden to bear, I can remove the deprecation annotations on those
methods.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6395 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-31 21:56:46 +00:00
Michael Bayne 74c2c77443 Passing in the timestamp that dictates idleness allows us to propagate the idle
duration a bit less far. And Ray will be pleased to know that we're doing much
less redundant arithmetic.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6385 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-16 02:18:53 +00:00
Charlie Groves 6a45fec4ea Don't let presents' ping interval into Connection
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6384 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-16 01:59:47 +00:00
Charlie Groves f12887ae87 Don't require that ConnectionManager be a Reporter
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6377 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-15 00:31:29 +00:00
Michael Bayne 2b90dee9f7 Let's make it easy for anyone to indicate their expected connection, and use it
to suppress subscription failure events in addition to subscription success, as
well as event forwards (though those shouldn't, in theory, go out over a new
connection because subscribers are cleared when a connection is dropped).
Nothing else looked like it might result in a spurious message being sent if a
connection was dropped and reestablished, so none of the other calls were made
to supply an expected connection.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6376 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-15 00:19:33 +00:00
Andrzej Kapolka a2f8e4f7d9 This is what seems to be happening: the client requests a subscription
on one connection, then disconnects.  While that request is in the
pipeline, it reconnects, then receives the subcription that the first
connection requested before it sends its own subscription requests.  To
prevent this, make sure that the current connection is the same one
that made the request.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6375 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-10 21:20:47 +00:00
Charlie Groves e7dd16adc1 Switch back to the initial implementation of RegistrationManager to keep sending the same events
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6363 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-10 02:51:05 +00:00
Andrzej Kapolka 7119d3e874 An additional check to help track down a bug where subscriptions aren't
being cleared properly.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6344 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-08 23:14:07 +00:00
Andrzej Kapolka ec989e68c2 Let's include the dropped message in the warning to help us figure out
what's being dropped in Project X.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6336 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-03 21:46:57 +00:00
Michael Bayne f0860e3c57 Let's catch Throwable so that we correctly shut ourselves down if something
unexceptional causes startup failure, like NoClassDefFoundError.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6335 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-03 18:21:21 +00:00
Andrzej Kapolka cfbf5a742c Hey, that's not a string!
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6326 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-02 00:31:03 +00:00
Mike Thomas 7f765020a9 Since we're in the middle of reporting a failure, this can be due to an already-disappeared client-obj. If so, let's not NPE and just log a nice friendly null.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6325 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-02 00:17:02 +00:00
Par Winzell 4c0224f835 Break success notification out into its own method. This lets me call it separately, and mastches reportFailure() quite elegantly besides.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6324 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-12-01 15:04:11 +00:00
Michael Bayne 9c9129a796 We can't use the type systesm to enforce our requirements, but we can use
obtain containment and a stack of specifically typed outer class references to
accomplish what we need without misleading casts.

This will require changes to Yohoho which I shall make forthwith.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6320 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-11-30 18:35:58 +00:00
Charlie Groves 8e5865995c * Add a static method to init and run a PresentsServer given guice modules with its configuration.
* Rename PrefixServer.Module classes to PrefixModule.  They all implement guice's Module, and it's
  hard to pass a class around as its interface if they share a name.



git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6303 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-11-23 22:19:01 +00:00
Charlie Groves 890cc0bdc1 Forgot to commit the RegistrationService implementation on Saturday
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6275 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-11-16 22:53:45 +00:00
Charlie Groves 544d41d24d Make ConnectionManager a general-purpose select server and implement a flash Policy server with it.
The presents-specific portions of ConnectionManager like reading Message subclasses and sending
datagrams are now in PresentsConnectionManager.  PresentsServer should behave identically, except
during shutdown.  Before, connections would be accepted and datagrams would be read until the OMgr
thread exited.  Now, both stop as soon as the server begins its shutdown.  This seems like an
improvement to me, but let me know if it causes issues and I can rework it.



git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6270 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-11-16 03:33:45 +00:00
Charlie Groves 1cb16d4173 Add RegistrationService to allow cpp clients to register receivers even though they're not using DObject
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6268 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-11-14 01:01:23 +00:00
Charlie Groves 07706ec61e handleAcceptedSocket can't be called by code outside of ConnectionManager as it
touches the _handlers Map which should only be modified on the
ConnectionManager thread.  Add transferAcceptedSocket for outside socket
acceptors to call.  It sticks new sockets into a queue, which are then passed
to handleAcceptedSocket as part of ConnectionManager's iterate.



git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6250 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-11-05 23:07:19 +00:00
Andrzej Kapolka 07b6a3a102 We should probably reset the dropped count each time the connection is
cleared.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6249 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-11-05 03:08:12 +00:00
Dave Hoover 0bb3713fe8 We're already using T for other things.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6241 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-10-25 23:10:08 +00:00
Michael Bayne e0dfddb46b Handle parameterized types in invocation services and receivers.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6232 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-10-23 19:37:51 +00:00
Michael Bayne 3b54853878 This old native code for dispatching signals needs to die die die. It's long
since been replaced by using the secret undocumented JDK APIs for doing the
same thing. AFAIK that works on all of our servers and we're not shipping
libsignal.so with anything.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6225 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-10-22 21:59:18 +00:00
Michael Bayne 9d2ca42eac Convert Narya (most of the way) over to a Maven Ant task based build. The
ActionScript bits remain belligerent, but the Java stuff is mostly shipshape.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6222 542714f4-19e9-0310-aa3c-eee0fc999fb1
2010-10-22 21:12:29 +00:00