Всем здравствуйте.
COM только начинаю изучать, так что прошу сильно не бить.
Имеется 2 приложения: сервер(сервис) и клиент, общающиеся через TCP.
class CServer
{
...
CDeviceManager m_DeviceManager;
std::vector<CClient*> m_Clients;
...
}
class CDeviceManager
{
...
std::vector<CDevice*> m_Devices;
...
}
Алгоритм сервера, в общих чертах, такой:
1. При запуске, поиск неких подключенных устройств, заполнение m_Devices.
2. При подключении/отключении нового клиента соответственно заполнение m_Clients.
3. При получении команды от клиента вызов void CServer::processClientCommand(CClient* pClient).
Использую Visual Studio 2008, ATL.
Подскажите как можно построить архитектуру сервера используя COM?
Поиск по интернету практически ничего не дал кроме каши в голове

.
Начал эксперименты с чего то примерно такого

:
class ATL_NO_VTABLE CServer :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CServer, &CLSID_Server>,
public IConnectionPointContainerImpl<CServer>,
public CProxy_IServerEvents<CServer>,
public IDispatchImpl<IServer, &IID_IServer, &LIBID_VideoServerLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
DECLARE_CLASSFACTORY_SINGLETON(CServer);
Потом понял что при вызове методов с клиента сервер не знает какой именно клиент вызвал метод

и понял что архитектуру придется здорово поменять, в принципе это не проблема, можно хоть заново все переписать.
Есть кое какие мысли, но не уверен в их правильности.
Например использовать что то типа этого при подключении клиента:
class ATL_NO_VTABLE CClient :
public CComObjectRootEx<CComMultiThreadModel>,
...
{
public:
DECLARE_CLASSFACTORY_AUTO_THREAD();
В этом случае при каждом подключении будет создаваться новый экземпляр клиента, но не знаю как это увязать с сервером.