I am working on the software design for a Java-based RTS (think Age of Empires) and am trying to figure out a few elements:
1. As the game should support both single and multiplayer, and in the interest of keeping the design consistent, I was thinking of using a client-server architecture (except that both run on the same PC when playing singleplayer). What do you think? Is there something more modern than what I learned at university six years ago?
2. Assuming I am on the right track in question 1, how should I pass player input to the server? Should I pass the coordinates of the mouse click or the key pressed by the player, or should I be performing some sort of processing on the client side?
2b. Should I use an event-based model, should I write messages to some sort of ordered container from which they can be retrieved and processed on the server, or is there some other technique I am not aware of?
3. In what order should I perform processing in my game loop: player input before or after existing actions (e.g. units moving)? existing actions (e.g. units moving) before or after flying bullets?

As you can tell, I have been reading up quite a lot on design, but I feel I have yet to fully understand and internalise the impact of the various concepts and patterns I have read about. I am more than happy to be pointed in the direction of some decent articles.

Any help would be greatly appreciated.

Thanks in advance!