Архитектура COM сервера
От: SkySniper  
Дата: 26.03.10 13:45
Оценка:
Всем здравствуйте.
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();

В этом случае при каждом подключении будет создаваться новый экземпляр клиента, но не знаю как это увязать с сервером.
dcom server
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.