Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

Callbacks & CORBA   Найти похожие ветки 

 
sands ©   (2004-11-04 11:25) [0]

Hi, All!
Использую механизм call-back. Вот выдержки из моих idl:

module _archiver {
interface KrArchiver {
...
}
}

module _kernel {
interface KrBase {
// Register archiver client-application on server side
boolean regArchiverApp( in _archiver::KrArchiver arhApp );
// UnRegister archiver client-application on server side
boolean unregArchiverApp( in _archiver::KrArchiver arhApp );
...
}
}

Проблема в том, что серверу приходят ссылки на stub, которые каждый раз разные!
Возможно ли средствами CORBA однозначно определить, какое из клиентских приложений(ранее вызвавших regArchiverApp(...)) вызывает unregArchiverApp(...)? Или надо городить свой "огород"?


 
inic ©   (2004-11-04 16:28) [1]

sands ©   (04.11.04 11:25)

Мои "исследования" показали, что нет, ИМХО конечно.

Может быть сделать так:

1. Каждый клиент при создании сам себе генерит уникальный InstanceName.
2. Это имя должно быть передано вместе со стабом серваку.
3. Сервак регистрирует этого клиента, записывая в некий свой StringList:
   StringList.AddObject(InstanceNameКлиента, Пробинденный стаб клиента).

Далее при дерегестрации клиента, когда серваку прийдет стаб, он ищет в StringList пробинденный стаб, сопоставляя имена, и удаляет эту запись. Следовательно имя/ID должно быть свойством клиента-объекта.

Ну а посылать оповещения клиентам в случае, если сервер инициирует завершение, можно просто перебирая StringList.

ЗЫ Как-то запутано написал


 
sands ©   (2004-11-09 08:46) [2]

inic
Пришлось сделать почти так, как ты и говорил! Но немножко не так... :)
Вот изменненый IDL:

module _kernel {
interface KrBase {
// Register archiver client-application on server side
any regArchiverApp( in _archiver::KrArchiver arhApp );
// UnRegister archiver client-application on server side
boolean unregArchiverApp( in any arhAppID );
...
}
}

Или с учетом особенностей реализации CORBA в Delphi:

module _kernel {
interface KrBase {
// Register archiver client-application on server side
unsigned long regArchiverApp( in _archiver::KrArchiver arhApp );
// UnRegister archiver client-application on server side
boolean unregArchiverApp( in unsigned long arhAppID );
...
}
}


При вызове клиентом метода regArchiverApp сервер возвращает ссылку на полученный стаб, которую клиент должен сохранить у себя и передать в unregArchiverApp при завершении работы.
Т.е. в качестве уникального идентификатора клиента я использую ссылку на стаб объекта, которую получил сервер (они же - ссылки - храняться на сервере в списке). Да, ссылку получаю методом <имя класса>Helper.Insert(...), восстанавливаю через <имя класса>Helper.Extract(...)



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
1-1122448657
wolf2541
2005-07-27 11:17
2005.08.14
проблема с cross-tab в fast report 2.5


5-1092222402
far
2004-08-11 15:06
2005.08.14
Перехват изменения набора полей DataSet-а в design-time (2)


1-1121446036
debuger
2005-07-15 20:47
2005.08.14
Умирающий поток.


14-1122230370
Chuvak
2005-07-24 22:39
2005.08.14
Посоветуйте цифровик...


4-1118705112
Strech
2005-06-14 03:25
2005.08.14
получение Background кисти окна