I actually over simplified the description of my networking design. Heres what I'm doing:
I have a thread that is getting the user input on the client and sending it to the server, and the server processes that data for the local simulation and then sends that input data to all the other clients.
The server entity base class has an "age" which is just the time that it was last synced on all the clients. This is slightly randomized at the start of the simulation on the server (to prevent a large lump of updates at one time. The server then "syncs"
all entities that have not been synced within the last 200ms.
On top of the "age" the server also tracks the entities that are within a particular area around the players and only sends them updates (with the 200ms age) for the entities that they may actually see. All the rest are only updated at something like 500ms,
or perhaps more (still havent finished implementing all these systems so some of this is just theory).
I am in-fact already using Lidgren, its a fantastic networking library.
So I suppose my questions are:
1. When one of the entities needs to be updated, can I just pass the velocity and position of a particular physics body and update it without screwing up the physics simulation?
2. how do I prevent the client simulation from running faster than the server simulation? or slower for that matter?
3. Can I add shapes to a body at runtime?