Thanks, Robert!

yes, don't worry, I wasn't doing that.  :-)

Basically the server has the master time, each client has a dynamic
ping value to the server, which is also shared with the other clients
for suitable adjustments.  at key moments a client notes the local
currentMillis() value matching an important server time value,
computes a delta which it can then use to move between currentMillis
and server time as needed (until the next Important Event freshens the
sync).

Important Events occur frequently enough to keep the clients
reasonably well synched, so long as I can depend on currentMillis to
actually move forward in real time (i.e. 500 ms from now, I need it to
be roughly 500 counts higher). Though a little jitter doesn't bother
me, seeing it jump 10 SECONDS in a 2 second period was causing me
alarm.

I will, of course, fail if the client changes their clock setting in
mid-game.  And I suppose the phone itself could initiate such a change
based on some signal from the provider, but I tell myself it will only
fail 'a little' in that case (assuming the hardware is not horribly
defective), so I choose not to worry about that.  (knowing that I
COULD use the nanotime to remove that sensitivity, but something makes
me prefer currentMillis right now... some unproven suspicion that it
is a cheaper computation.)

And I assume what was happening before was that running multiple
emulators under eclipse was starving them of cpu to such a degree that
an internal emulation of the phone clock was missing some important
polled event.  I can't decide if I think that's cool or not.  Would it
be cheating for the emulator to just read the host hardware clock?...
I guess so.  So instead it probably reads a simulation of the
nanoclock, which turns out to be unreliable in a low cpu cycle
environment.

And manually running emulators in separate CMD windows seems to help
it take advantage of the host's multiple cores.  Which I guess would
be asking Eclipse a lot to do, given that it is also giving me all
those nice debug hooks :-)  I shouldn't be so demanding.  I love you,
Eclipse, I really do, except when you crash or that time you deleted
every source file in my project with nary a warning.

Thanks again!

- Dan

On Mar 10, 5:53 pm, Robert Green <[email protected]> wrote:
> Samsyn,
>
> For multiplayer synchronization, you absolutely can not count on the
> current time of either device.  Here's one way to handle it:
>
> Both host and client use System.nanoTime() / 1000000;  That gives you
> a fairly accurate counter to use.
> Host sends snapshots with their current time.  Client adapts the
> host's time for interpolation by attempting to detect ping and use it
> as a skew.
>
> On Mar 10, 7:36 pm, Samsyn <[email protected]> wrote:
> =

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to