Commit Graph

200 Commits

Author SHA1 Message Date
Michael Bayne e41dda3018 Style fixes and import pruning. Beware, CheckStyle is (finally) coming to town.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5240 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-07-18 18:32:59 +00:00
Michael Bayne 531f0c9ffe On second thought, let's just type our delegate operations and only apply them
to delegates that can handle them. Turns out we already even had this option in
the PlaceController.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5224 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-07-10 13:36:52 +00:00
Michael Bayne 950fb6c4aa Detect programmer error in delegate usage as early as possible and fail.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5223 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-07-10 13:19:21 +00:00
Michael Bayne 2cfb546015 Nix our legacy static references as we have those in our leaf projects now.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5214 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-30 14:33:06 +00:00
Michael Bayne 6a9723fb11 Extract BodyObject location into a separate service that can be customized by
extending systems and depended upon by services that need to lookup bodies.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5212 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-29 14:11:42 +00:00
Michael Bayne 34439e3461 Unixed import nixage, service regen, some dependency injection.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5205 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-29 12:42:06 +00:00
Jamie Doornbos 3726a408fa Fix error introduced in revision 5170
Place manager delegates now store their own references to the omgr and invmgr 
and set the members via the init function. This is fine, but due to the order
of calling PlaceManager's init and addDelegate, the PlaceManagerDelegate.init 
was receiving null values. 

The fix is to provied a more consistent guarantee about the relationship
between init and addDelegate. After both have been called (regardless of
order), we guarantee that both init and didInit have been called on all 
delegates.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5177 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-10 18:24:33 +00:00
Michael Bayne 0128f6525a Modify PresentsClient and ClientResolver creation so that we can inject
dependencies into both. Moved the legacy statics into CrowdServer so that at
least Presents can be pure (we should probably eventually move them into
BangServer and PiracyServer and fix everything else). Added some useful manager
references to PlaceManager delegate (_omgr, _invmgr) that handle the majority
of their service needs.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5170 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-08 20:23:49 +00:00
Michael Bayne bf77cb1520 Moved location services implementation into LocationManager so that
LocationProvider can be an interface like its brothers and sisters.

Modified the place registry to create PlaceManager instances using the injector
so that we can inject dependencies into managers. Also modified the custom
classloader functionality so that it can/will circumvent this process
entirely. It's not possible to inject using a custom classloader and one
certainly would not want to do so.

Unfortunately this means we can't inject some basic managers into PlaceManager
because it needs to work for games loaded into a sandboxed classloader, but the
big win is that in everything other than GameManager and PlaceManager, we can
inject to our heart's content.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5168 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-08 17:18:26 +00:00
Michael Bayne a7c7d853fe Handle the BodyService with a BodyManager instead of a concrete BodyProvider.
More dependency injection (or removal in the case of SpeakUtil).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5163 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-08 13:06:03 +00:00
Michael Bayne eee2c74943 More singleton marking.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5160 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-08 10:29:18 +00:00
Michael Bayne a531fd2196 Inject the ChatProvider as well.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5159 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-08 10:10:41 +00:00
Michael Bayne 3404d14e7b Have the PlaceRegistry handle shutting down all places when the server shuts
down. Inject same.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5158 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-08 10:07:41 +00:00
Michael Bayne fce06c52c5 Actually instead of doing the necessary jiggery pokery to make PresentsServer
subclasses provide PresentsServer "services" we'll just have no PresentsServer
services. All services will be provided by components and the server will
disappear in a puff of inversion of control.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5155 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-07 18:57:04 +00:00
Michael Bayne c568204bbb Merge the ServerInvoker stuff into PresentsInvoker because the PresentsInvoker
is only ever used by the PresentsServer. Also determined that we need to
explicitly let Guice know that CrowdServer provides the PresentsServer
"interface" and so on down the line.

I also think that each concrete class needs to be marked as @Singleton though I
need to confirm that. Based on how annotations work, that's how it would be
easiest to implement, so we'll assume they're not doing extra work on the
backend to make our life easier.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5154 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-07 18:39:19 +00:00
Michael Bayne 3aefc93838 Holy fruity beverage Batman! I'm taking the plunge and switching to Guice for
dependency resolution and management. Things are currently in a state of
transition, but the important patterns have been established and I'll aim to
sweep through all of Narya, Nenya and Vilya in the near future and do
everything properly.

Going through the other million-odd lines of code we have scattered across our
various projects that use these libraries is not something I plan to do, so
we'll be maintaining backward compatibility with the old static member method,
though I hope to strive toward eradication of that usage entirely in MSOY while
we still have a fighting chance.

Given that some of our projects will continue to use the static member method
in perpetuity, I'm not going to @Deprecate those fields because that would fill
their logs with so much spam that they'd have to turn off deprecation warnings
which would make life worse for them. So instead we'll settle for the big scary
comment warning people away from the old bits.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5153 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-06-07 17:44:48 +00:00
Michael Bayne 919112cf88 Switch to new samskivert logging API.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5134 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-05-27 19:25:38 +00:00
Michael Bayne 591dc1541a Extract our permission policy into a separate class so that a system can more
easily make use of different permission policies in different circumstances
(one can imagine a hypothetical partner who has different access control
requirements, perhaps).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5118 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-05-22 13:12:40 +00:00
Michael Bayne ec3fb4023a Allow the BodyObject to play along when we enter and leave a place.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5108 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-05-18 11:30:45 +00:00
Ray Greenwell 2cb6086434 Look ma, it's the last word in a small Ray-Charlie quibble. :)
I just feel like: imagine if there were no Map.containsKey().
You would instead have to get() the value and see if it's not null.
If you did that, you certainly wouldn't throw away the value if you
were going to get it again right below, would you? So why would
you do it simply because of the addition of a convenient method
called containsKey()?


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5067 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-05-09 21:46:43 +00:00
Michael Bayne 5d544fdd55 Use Maps and Lists. Unglommed imports. Having them separated into presents and
crowd was intentional (with presents on top because it is more "generic"). We
must resist Eclipse's desire to squish our imports together into one giant,
hard to (visually) parse blob.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5060 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-05-09 11:47:38 +00:00
Par Winzell 5924aac198 Running genreceiver and genservice with Jamie's spiffed-up generators.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5037 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-05-06 16:59:04 +00:00
Charlie Groves 938d7f5994 Share a single MethodFinder between all instances of a subclass of PlaceManager as they can be large enough constitute the bulk of a PlaceManager
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5029 542714f4-19e9-0310-aa3c-eee0fc999fb1
2008-04-29 18:07:04 +00:00
Michael Bayne c935c46612 Handle the client connecting and disconnecting before client object resolution
completed, or connecting, disconnecting and reconnceting before client object
resolution completes a little more gracefully.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4889 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-12-03 18:28:07 +00:00
Michael Bayne 95adfeb646 Regenerated services.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4883 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-11-28 00:25:35 +00:00
Michael Bayne b688776893 Allow createPlace() to be passed a list of delegates to be added to the place
manager prior to it being initialized or started up.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4869 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-11-10 05:01:02 +00:00
Michael Bayne abeeef4d10 PlaceManagerDelegate no longer takes its target manager in its constructor but
rather is configured with it when added to the manager as a delegate.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4868 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-11-10 04:41:01 +00:00
Michael Bayne d4562ff806 Allow external parties to call applyToDelegates().
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4838 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-10-02 23:29:02 +00:00
Dave Hoover 59a65e9ef2 We're waiting to hear that our PlaceObject has been destroyed so we can
call didShutdown, so we can't stop listening to it until then.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4824 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-09-13 21:38:01 +00:00
Michael Bayne e71fed20c3 Clear out our PlaceManager listenerships when we shutdown to ensure that the
manager can be collected even if the object lingers about for a while and
because it sets a good example.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4823 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-09-11 22:20:28 +00:00
Michael Bayne bc739b6520 Clear out our speak service once we've unregistered it.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4822 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-09-11 19:59:08 +00:00
Michael Bayne 3f7705dfc2 Split SpeakProvider into SpeakHandler and SpeakUtil. SpeakProvider is now a
proper interface like all the other new invocation service backends.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4795 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-07-31 21:05:23 +00:00
Michael Bayne 962326fcaf Revamped the way BodyObject.location is tracked. Now we use an object which can
be extended to contain the sceneId by Whirled (Vilya's Whirled, though also
Whirled Whirled by extension) so that we don't end up with problems where
BodyObject.location changes but BodyObject.sceneId remains stale. This won't
impact Yohoho because the Yohoho client is always in a scene, it uses a
separate mechanism to track games, whereas Whirled's natural usage is to move
between scenes and non-scenes.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4779 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-07-21 00:46:25 +00:00
Michael Bayne b0ec20eff9 Widening.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4776 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-07-18 21:58:16 +00:00
Ray Greenwell cbb661337f Just check if the message event is private.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4650 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-04-06 20:53:49 +00:00
Ray Greenwell 5843ce777c Only attempt to call a method on the manager if the received event
is a ServerMessageEvent.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4649 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-04-06 20:46:15 +00:00
Michael Bayne 09f0bee0f3 Yet more header patrol.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4602 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-24 00:39:27 +00:00
Michael Bayne c25024f497 Move some low-level object access control into Presents from Crowd (default all
objects to non-modifiable, restrict client object subscriptions to the client
in question). Modified Peer code to not log a warning when a peer is not online
in an expected way (not listening for connections).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4598 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-23 19:41:30 +00:00
Michael Bayne ebc99935d5 If we're going to do this, I guess we're going to do it properly. Nixed the
notion of a global group (though we implicitly define one in InvocationCodes)
added a mechanism for directors (which generally handle the client side of
invocation services) to register their interest in bootstrap service groups so
that the whole goddamned complex business can happen magically behind the
scenes.

If you instantiate a director, it will automatically register interest in the
service group it needs and everything will work. If you don't use the director
code, you don't get the services and you can safely exclude all of that code
from your client even though the services are still in use on the server (and
presumably used by some other types of clients).

This is going to break all the builds, which I'll soon fix. Then I'll go write
all this in ActionScript. Yay!


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4552 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-11 01:17:30 +00:00
Dave Hoover 5622bc271b Actually substitute keywords (these files are chock full of stale $Id$ tags)
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4509 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-01-24 00:22:07 +00:00
Michael Bayne 737bca0a98 Have where() use which().
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4463 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-11-28 18:24:25 +00:00
Ray Greenwell 776761aeef Allow the occupant info to be different depending on the place.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4457 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-11-17 20:01:36 +00:00
Michael Bayne 4694c1ce17 Just who() is fine, we don't need the whole user object dumped.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4445 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-11-07 01:40:23 +00:00
Michael Bayne 35082bbaca New and improved lint removal.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4438 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-10-26 23:00:20 +00:00
Michael Bayne 20c0f0ff3d Regenerated with updated Marshaller and Dispatcher templates.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4398 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-10-04 18:13:34 +00:00
Michael Bayne 6a47c766cc Switched to a better name.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4345 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-08-24 18:42:22 +00:00
Michael Bayne b4d66588c1 Added some magic on the road toward more elegant support for dynamic languages
like Groovy and JRuby. Created a DynamicEventDispatcher that automatically maps
attribute, element and set events to methods. Say you have a field:

  public DSet occupantInfo;

you can create a method in any class:

  public void occupantInfoAdded (BodyObject source, OccupantInfo entry);

and then bind that class as a listener using the dynamic event dispatcher:

  _myobj.addListener(new DynamicEventDispatcher(object));

I also created a nicer replacement for the MessageHandler system which is
clunky but still way simpler than using a full InvocationService. Basically we
dispatch MessageEvent as if it were a method call. 

For example, in AtlantiManager I define:

    public void placeTile (BodyObject placer, AtlantiTile tile)

which receives a request by a player to place a tile on their turn. Then in
AtlantiController, I simply call:

   _atlobj.manager.invoke("placeTile", tile);

Of course, in JRuby and Groovy, that's going to look like:

   _atlobj.manager.placeTile(tile);

which is all part of the fun.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4344 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-08-24 17:35:32 +00:00
Michael Bayne bc9f53396c Revamped distributed object creation. There was no particular reason to create
distributed objects by reflection since we don't allow clients to create
objects, furthermore we needn't do it asynchronously. The object creation
methods were moved into the server-side only interface and made "immediate", so
the caller creates a derived instance of DObject and registers it with the
system instead of creating it with a Subscriber callback.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4342 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-08-23 23:46:48 +00:00
Mike Thomas 3d7c12a5d1 Allow a little more info in deciding whether to declare the place empty.
Also, while I was in there, added some safety so we don't lose track of shutdownIntervals and let them run amuck.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4295 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-28 21:16:37 +00:00
Mike Thomas 19219bb1a3 Break out the logic for whether the place is empty so we can override it.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4280 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-20 01:28:29 +00:00