SE,
I'm working on a rather small project where we will be developing a small engine, a client, a server and an editor of some kind. It's a component-based 3D engine with basic systems like Rendering, Simple-Physics, etc.
So far, after a fair amount of thought I've decided to structure the engine as a library. It'll contain the classes for all of the components and the sub-systems, but will not run them. Instead it will be included into another project that will initialize the engine and run the game loop. I've started calling that second project the "host application."
I see the host application as the "game" or the "editor" with the engine kind of looking like a strap-on jetpack of goodies.
The reason for this (in my mind) is to allow the engine to be reusable, and so I can develop our editor, game, model viewer, etc. using the engine without having duplicate code every which way.
This is all working out well thus far, however when considering the typical client/server model for a multiplayer game a few questions come up.
In one respect I can treat the client and server as separate projects, both referring to the engine, in the other respect I could develop the client and server as one project with a bunch of switches and a command-line argument to denote which "mode" the game should be in.
Could one of you insightful awesome people shed some light on the pro's and con's of these methods, or perhaps suggest a better way?
Thanks! -Cody