Platform shouldn't matter, I've long since solved platform neutrality problems in GAE, it shouldn't be able to get this out of sync at all. Part of the problem is the delay enforced on commands, they have to wait up to 250 milliseconds before they are transmitted because it waits for a key frame. I will look into some more mechanisms to solve the sync conditions after the real problems are fixed (i.e., commands being sent by server properly, no crashes, etc.). It may not be as clear from a user perspective, but the serious problems are those of stability. Issues like game exiting for trivial reasons (wrong IP address entered, etc.) are easily solvable, but stability issues can be very tough. However, I'm sure that 80% to 90% of the "sync" problems are due to some other bug somewhere, because as GAE is now, it should actually be more in sync than the original Glest.
Part of the problem sometimes has been that I hadn't understood the "contracts" between objects at all times, it's been a discovery and learning process as I've gone. Then, I have changed some of these contracts in GAE. I think I'm going to write up a specification that lays out these contracts between objects (classes of Unit, World, Game, UnitUpdater, UpgradeManager, etc.) both to make sure I remember and to help others who want to start programming GAE. After those internal contracts are understood, then there's the entire networking layer on top of it, as client and server behave and interact differently.
Finally, I'm going to do an 0.2.12 that adds peer-to-peer communications so that commands created on one client are transmitted directly to all other clients (for games with 3+ players) rather than being routed through the server. I'm also going to change the way commands are transmitted (on both clients & server) so that they are sent immediately, (in each world frame, which is currently 40 times a second) rather than only once per 250 milliseconds. I'll still have the games sync on every "key frame" -- this essentially causes clients to wait for the server to tell them to proceed, assuring that clients are never in a frame ahead of the server. Currently, key frames occur every 10 "world frames". When testing that, I should be able to isolate any other game sync issues that arise. I may also revamp the way world and rendering frames are executed. Currently, animations only update a max of 40 times per second (in the world frames), even though all of the interpolation required to update them more is done during rendering. By moving the update of "animation progress" to rendering, it can make animations smoother without extra costs. But the main problem is that the world frames lag on slower computers, so I want to see how that can be fixed. Perhaps after moving animation progress to the rendering frames, I can safely lower world frames to something like 15 times per second instead of 40, especially if I allow "excess" time spent executing a skill to be passed to the next skill's execution (that's complicated, maybe I shouldn't explain it
)
Anyway, thanks titi, I'll post when I get something else out.