Commit Graph

179 Commits

Author SHA1 Message Date
Michael Bayne a6a6af8e99 Fix some niggling oid translation problems.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4740 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-06-19 01:03:48 +00:00
Michael Bayne 2fead8208c Let's not confuse terminology between one server proxying for another server
and the ProxySubscriber mechanism by which the server proxies for the client.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4730 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-06-13 22:41:41 +00:00
Michael Bayne c365afa2fc Rejiggered the way things are handled when using a Client to proxy events from
another server. The PeerManager needs both to rewrite the oid of the events
before dispatching them and to assign an eventId to them so that they will not
be filtered by PresentsClient when deciding whether or not to send them along
to its client. Also fixed compound event dispatch in the process. Now proxy
subscribers will be notified once of a compound event rather than of each
individual internal event.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4729 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-06-13 22:37:53 +00:00
Elizabeth Fong 3c7a546472 rollback r4636 due to interference with non-yohoho projects
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4637 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-03-27 21:49:25 +00:00
Elizabeth Fong f76825c76e Fix yohoho singleplayer NPE boochery caused by unsafe direct call on DObjectManager
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4636 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-03-27 21:11:13 +00:00
Michael Bayne f0fe896194 Widened, modified sendRequest() to avoid freakout if it is called after the
director is cleaned up.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4624 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-03-13 18:18:06 +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
Andrzej Kapolka 2376e86f3f Forward events to proxies. Fixed NPE, changed account names used in
peer sign-on to be the connecting server's node name.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4580 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-15 00:26:52 +00:00
Michael Bayne 9ac3e86fe0 Being available in standalone mode should be the default. This will of course
make life harder for Yohoho, but making life easier for Yohoho should not come
at the expense of baffling default behavior.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4574 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-13 00:26:46 +00:00
Michael Bayne de633c61b5 Standalone mode logon needs to be done less hackily now.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4572 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-13 00:20:02 +00:00
Michael Bayne a617b9322e We need to run willLogon() immediately, also modified BasicDirector and Client
to fail if a director tries to register services groups but was not created
until after the client was logged on.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4557 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-11 20:37:28 +00:00
Michael Bayne b7e16c86f5 Added getBootGroups() to Client, made use of it.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4555 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-11 03:08:04 +00:00
Michael Bayne c2dbae4809 We'll actually need to call clientWillLogon()...
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4554 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-11 01:50:11 +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
Michael Bayne 9afcc526a0 Bit the bullet and implemented invocation service groups so that our various
MetaSOY clients (Swiftly, World, and soon Admin Dashboard) don't have to know
about a bunch of unrelated crap. Fricking complexity++, grumble.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4551 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-11 00:42:35 +00:00
Michael Bayne e1c5d01afd Added proxied object support to the distributed object manager framework. This
exposes the need to write a Client that is optimized to act as a proxy instead
of just using the one that is designed to run on a user's machine. However,
this will be fine for now. Integration with PeerManager forthcoming.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4530 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-03 01:14:17 +00:00
Michael Bayne 12410ee32c Widening.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4527 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-02-02 23:49:24 +00:00
Michael Bayne d6929da884 Config -> PrefsConfig in appropriate places.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4518 542714f4-19e9-0310-aa3c-eee0fc999fb1
2007-01-31 00:46:21 +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 bbdcb53039 Fix problem where users are unable to connect to certain servers due to their preferred port getting locked into 443, which we aren't actually listening on.
We need to set up the preference interval (but not start it) before we try to open the connection.  Otherwise, we won't have it around if we get a shutdown call during that opening (which can and does happen).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4274 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-18 05:24:22 +00:00
Michael Bayne 4894d1cfde Annoyingly, ClientObserver.clientDidLogoff() is called before the client's
inner bits are all clear and ready to try logging on to a new server. We
specifically wait to call clientLogonFailed() until after everything is
cleared, but I don't want to change the behavior of clientDidLogoff() for fear
that any one of the zillion directors depends on something being around during
that call.

Instead I added another callback clientDidClear() that is called when a
successful session is fulled cleared out (basically when we're not calling
clientLogonFailed()) so that entities that are waiting for a logoff to finish
so that they can logon somewhere else have a clean way of doing so.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4255 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-07 04:02:42 +00:00
Michael Bayne 8afd0316ec I decided to go hog wild and clean up all the type use in Presents which
required some serious bending and folding of the generic type system, but for
the most part we managed to avoid any mutilating. The gendobj task now
generates properly typed "addToXXX" and "updateXXX" DSet methods based on the
parameterized type of the DSet. This might cause unrecompiled code to break,
but I don't think there are many cases in the base toolkit where people call
DSet adders or updaters. We'll see and I'll add backwards compatibility
versions for cases where we need them to support GG games (everything else we
can just recompile).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4245 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-05 00:55:05 +00:00
Michael Bayne 33a758dfce The basis of cluster support for Presents servers. All servers in a cluster
make connections to other servers in the cluster and can exchange events (in a
limited fashion).

This is different than Liz's project wherein servers share an oid space and one
can interchangably work with distributed objects from any server. This package
provides a means by which certain services (by default, presence and chat) can
be communicated between servers to allow communication between players
scattered around a bunch of otherwise independent server instances.

This is less general purpose but also less likely to encourage people to write
code that tightly couples multiple servers and then falls over because it
generates gobs of network traffic as events are flung willy nilly behind the
scenes.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4238 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-07-01 00:19:59 +00:00
Michael Bayne 06680b789f Type safety.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4237 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-06-30 21:58:34 +00:00
Michael Bayne 0a5953bf17 Chipping away at proper type safety for all of the Narya code.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4232 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-06-27 17:46:36 +00:00
Michael Bayne 755d9326fe Pardon the code rewritery but I got halfway through an email explaining the
synchronization problems and decided it would be a lot easier to just fix them.
The interval thread and the communication writer thread need to be properly
coordinated to avoid funny business.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4229 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-06-27 06:59:30 +00:00
Mike Thomas d492a4b154 Be smarter about quick-disconnects, don't count them as preferred ports. If we have a disconnect within 5 seconds, we set the _next_ port in the list as our preferred port. This should address the windows network sharing issue.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4227 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-06-27 01:52:06 +00:00
Ray Greenwell 79c6427c21 StringBuffer -> StringBuilder.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4191 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-06-13 22:42:20 +00:00
Michael Bayne 77adfc15ec Revamped the basic Presents client to support attempts to connect to the server
on multiple ports, falling back from one to the next as appropriate.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4158 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-05-30 22:12:15 +00:00
Ray Greenwell 26c928fc45 Use the valueOf factory methods pretty much everywhere.
These are the preferred way to get instances of Boolean, Byte,
Short, Character, Integer, Long, Float, and Double object.
It's always made sense for Boolean objects, and with 1.5 these factory
methods were blessed as the proper way to get instances unless one
absolutely needed a distinct object.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4145 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-05-24 01:24:24 +00:00
Michael Bayne 5a2583470c Brought code in line with changes to Samskivert. I have not started to
genericize Narya data structures, nor make the existing code type safe. That's
going to be an extremely large project.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4007 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-04-10 08:59:30 +00:00
Michael Bayne 8d91fa9e7f Don't log a stack trace here.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4004 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-04-10 01:22:39 +00:00
Ray Greenwell 3cef4b5cec Prevent NPE when we process a pong that was destined for a different
DeltaCalculator.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4003 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-04-07 18:52:24 +00:00
Ray Greenwell fb913a6bba Go back to using the median value for our delta estimate.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3991 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-03-30 19:06:40 +00:00
Ray Greenwell 981deb3b6b Fixed two bugs with delta calculation:
- if a pong response took more than 5 seconds to receive, another ping
  would be sent. When the pong finally arrived the delta would be
  calculated using the most recently sent ping.
  Fix: don't send more pings while waiting on a pong.
- After a pong is received, the _deltas array is mangled while
  calculating the server delta, making subsequent pongs possibly
  overwrite earlier calculated deltas.
  Fix: calculate using a copy.

Also, changed the delta calculation to be the mean of the deltas rather
than the median. Left code in to do it both ways if this change was not
kosher...


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3990 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-03-30 01:08:32 +00:00
Ray Greenwell 5f6152230a Tiny optimization.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3920 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-03-08 00:49:04 +00:00
Michael Bayne 4324149cdb We queue ourselves up every time an event comes in, so we should only process
one event when our run() method is called and then let other (non-distributed
object) things get their chance to run in proper order.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3795 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-12-21 19:30:39 +00:00
Ray Greenwell 7a64be94f2 Goodbye, NestableIOException.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3788 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-12-20 02:09:18 +00:00
Michael Bayne 301c1cbe4d Dispatch the notification that the client failed to logon after we are
completely cleaned up so that an immediate attempt to logon using a
different configuration will not fail due to the client thinking it's
still logged on from the previous failed attempt.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3658 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-07-21 20:23:37 +00:00
Michael Bayne eba31091bb Switch the default port for the Presents system to the DirectPlay port.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3656 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-07-21 19:26:05 +00:00
Michael Bayne ee144eb974 Created a basic application framework that integrates JME's rendering loop
(in fixed framerate format) with the Presents event queue in what will
hopefully be happy harmony. Also made some edits to the Presents code to
not sound like we assume things run on the AWT thread which we don't and
which is not the case in this framework.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3510 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-04-20 21:44:03 +00:00
Ray Greenwell 0192a84739 Print out extra information when the strange "invalid argument" socket
connect exception gets thrown.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3462 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-04-08 19:27:57 +00:00
Michael Bayne a4ac47fb04 Reinstated the Presents I/O refactor with the modification of ensuring
that authentication is processed on the dobjmgr thread rather than
requiring the caller to do the right thing (or not as the case happened to
be).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3433 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-28 21:49:19 +00:00
Ray Greenwell d58d1001ac Roll it all back.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3432 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-28 19:33:28 +00:00
Michael Bayne a285695ca8 I finally broke down and did the rewrite to fix the potential race
condition between the omgr thread and the conmgr thread. Now when the omgr
thread processes an event that is going out to the clients, it flattents
the message itself for each client that is to receive the message and the
flattened data is posted to the conmgr outgoing queue.

This means that once an event is finished processing, no further
modifications to any of the data associated with the event can effect the
data queued up to be sent to the client. This is a good thing, it will
eliminate or illuminate a very baffling class of bugs that we've sort of
been ignoring because we knew this could be the cause.

We used to take an event and flatten it directly into the direct buffer
from which we would do our socket write. Now we flatten it into a
temporary byte array. This means a metric shitload more garbage generation
and collection. We used to do the flattening on the conmgr thread, now we
do it on the omgr thread. This means a big redistribution of CPU demand.

Either of those things could result in a significant negative impact on
our performance, but we'll just have to deploy this stuff and find out.
Whee! If it turns out to be a serious problem, there are potential
optimizations that could be done by keeping a pool of direct buffers
around and flattening messages into them, relying on the fact that the
outgoing conmgr queue generally doesn't grow too large and we could
allocate tens to a hundred megabytes of memory for the outgoing queue if
we really needed to.

I'd also like to test the overflow handling stuff more. It didn't really
change in that everything just deals with arrays of bytes now instead of
unflattened messages, but I'll be more comfortable once I've seen all this
in action on ice where there may be few users, but they are just as likely
to experience lag and receive an overflow queue as users on the higher
traffic servers. There is code to log when overflow queues are created and
finally flushed and how much use they got while they were around, so that
should give us an indication of whether things are operating properly.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3419 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-19 08:39:19 +00:00
Michael Bayne 2f24fdb449 Truncate the text of the long message. We can figure out what it is from
the first 80 characters if this every actually discovers an anomaly rather
than just dutifully reporting every time someone updates really lengthy
crew news.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3409 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-15 17:08:55 +00:00
Michael Bayne 2d19a0ba82 Renamed DSet.entries() -> DSet.iterator().
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3406 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-15 02:12:03 +00:00
Andrzej Kapolka ad1edd6e69 Added standalone flag and special standalone logoff method to Client, options to BasicDirector to hold off on initializing directors not needed for standalone mode.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3393 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-03-10 02:06:43 +00:00
Michael Bayne 121f6d7e53 Did the refactoring necessary to get the client and server to live happily
together in one JVM and both interoperate with the AWT thread in a manner
so harmonious as to bring a tear to the eye. This was surprisingly much
easier that I expected, thanks to my eminently sensible initial design,
I'm sure. ;)


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3360 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-02-20 00:37:34 +00:00
Michael Bayne 56417cdb0a Indicate whether we rejected an attempt to logon because we're still in
the throes of a previous connection. Also don't spuriously recreate our
ticker because it's very possible for logon() to be called and not
logoff(), logon() might fail, for example.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3321 542714f4-19e9-0310-aa3c-eee0fc999fb1
2005-01-28 05:03:37 +00:00