CDL
Каждый используемый в решении компонент должен быть описан на языке CDL в отдельном файле <имя компонента>.cdl
.
Имя CDL-файла должно совпадать с именем компонента, который он описывает.
CDL-файл содержит следующие разделы:
- Имя компонента. Перед именем компонента ставится ключевое слово
component
.Имя компонента должно начинаться с заглавной буквы и не может содержать символ подчеркивания (_).
- Интерфейс безопасности, содержащийся в этом компоненте. Раздел не является обязательным и должен быть добавлен, только если в компоненте содержится интерфейс безопасности. Декларируется ключевым словом
security
, за которым следует полное имя интерфейса. - Перечень реализаций интерфейсов, которые включены в этот компонент. Интерфейсы декларируются в секции
interfaces
, внутри которой каждая реализация интерфейса указывается отдельной строкой в следующем формате:interfaces {
<имя реализации интерфейса>:<имя интерфейса>
}
Компонент может содержать несколько реализаций одного интерфейса. Все реализуемые интерфейсы необходимо описать на языке IDL в IDL-файлах.
Имя реализации интерфейса не может содержать символ подчеркивания (_).
- Список экземпляров компонентов, вложенных в этот компонент. Раздел не является обязательным и добавляется в том случае, если компонент содержит вложенные компоненты. Компоненты декларируются в секции
components
, внутри которой каждый экземпляр компонента указывается отдельной строкой в следующем формате:components {
<имя экземпляра компонента>:<имя компонента>
}
Для каждого указанного компонента необходимо создать отдельный файл
<имя компонента>.cdl
, содержащий описание компонента на языке CDL. В компонент можно добавить несколько экземпляров одного и того же компонента, причем каждый может иметь отдельное состояние.Имя экземпляра компонента не может содержать символ подчеркивания (_).
СDL поддерживает однострочные и многострочные комментарии в стиле C++.
Примеры CDL-файлов
В простейшем случае компонент содержит единственную реализацию интерфейса, подобно компоненту ping
из примера echo.
Ping.cdl
/* Имя компонента: Ping */
component Ping
/* Компонент содержит именованную реализацию интерфейса IPing. Имя реализации: pingimpl.*/
components {
pingimpl: IPing
}
В следующем примере компонент CoFoo
содержит реализации двух интерфейсов, объявленных в двух разных пакетах Foo
и Baz
(т.е. в файлах Foo.idl
и Bar.idl
):
CoFoo.cdl
/* Имя компонента: CoFoo */
component CoFoo
interfaces {
/* Компонент содержит реализацию интерфейса Foo. Имя реализации: foo.*/
foo: Foo
/* Компонент содержит три разных реализации интерфейса Bar. Имена реализаций: bar1, bar2 и bar3.*/
bar1: Bar
bar2: Bar
bar3: Bar
}
В следующем примере компонент CoFoo
содержит единственную реализацию интерфейса, а также вложенный компонент.
CoFoo.cdl
/* Имя компонента: CoFoo */
component CoFoo
interfaces {
/* Компонент содержит реализацию интерфейса Foo. Имя реализации: foo.*/
foo: Foo
}
components {
/* Компонент содержит экземпляр компонента CoBar. Имя экземпляра: bar.*/
bar: CoBar
}