Guns Server Design

The Guns server has two states (lobby and battle), and behaves differently in each state.

In the lobby state, the server listens for incoming TCP connections, authenticates connecting clients, and makes sure they're all set up for battle mode.

In the battle state, the server multiplexes UDP communications between the clients, runs a physics simulation, and generally makes sure things keep working.

The lobby state
...hasn't actually been written yet. It's taking a back seat to:

The battle state
The Guns protocol outlines most of the interesting battle state commands (and some implementation details).

During the battle state, the server runs the authoritative physics simulation, making sure tanks move around, collide correctly with objects, shoot at each other, and so on. Clients may (and probably should) run their own versions thereof, but if client and server ever disagree, the server is authoritative and its updates should squash the client's.

On the other hand, as of this writing, there's not much physics simulation to run, so this is all just theory.