Wondering if someone had some ears (or eyes I guess) I could bounce some concepts off of regarding a Client/Server system design.

All technicalities aside (such as message framing etc..) I was wondering if anyone had ideas for how a system like that should be set up?

Currently my concept involves the following:

  1. A Server Control Panel (GUI Interface)
  2. A Server Service (Windows Service)
  3. Communication Management System (Server core)

The Server Control panel simply queries the Communication Management System to get information about the windows service (is it running? start it, stop it, change a setting etc...) The server control panel also contains a log viewer as well.

The Server Service is the actual service that can run on the windows system. This allows the server to run in the background without a GUI open or hidden in the task know...a service.

Communication Management System is a library (dll) of commands that the control panel AND the service can use to communicate with each other AND with any users connected to the system. I think I want this in it's own library for one simple reason: The server manager can, at any time via the Control Panel (and also during system setup) indicate that the server should run "in service mode" or "only when the control panel is open." By putting the server commands in a dll, it can be shared (preventing redundant coding).

Is this the standard way of implementing a server service? I've not been able to find much information on the topic. Most service examples use timers and not sockets to perform actions.

I'd appreciate any help in determining the design for something like this. Is it better to have the control panel query the service directly and issue commands or is using the dll better? I'm trying to consider maintainable as well, updating a dll is sometimes more "user friendly" than updating the GUI (not they they would know really what is being updated but eh...I don't know...)

I attached a (albeit rather cheesy and probably hard to read) diagram of the basic idea.

Sounds good, but I'd split the Communication Management System dll into three parts, each one handling communication to one section of your design (control panel communications, service communications, user communications).

You mean 3 dlls or 3 different classes?

I'm assuming you meant classes...dll hell sucks :)

I actually mean DLLs as that allows you to replace one without affecting the others (if done right). Either way works, and neither way is wrong :)

Hmmm...that's an interesting thought. I'll have to think about that one. I suppose it does make sense.

Thanks! You are always a well of endless good ideas! Who do you work for? Can we steal you? lol

Currently I don't work for anyone :) least you don't have bosses to deal with...