KasperskyOS Community Edition 1.0

Файлы описаний в примере ping

Описание сущности Client

Сущность Client не реализует ни одного интерфейса, поэтому в EDL-описании достаточно объявить имя сущности.

Client.edl

/* Описание сущности Client. */

entity ping.Client

Описание сущности Server

Сущность Server реализует интерфейс Connection, содержащий два метода – Ping и Pong. Как и в примере echo, требуется объявить отдельный компонент (например Control), содержащий реализацию интерфейса Connection.

В EDL-описании сущности Server необходимо указать, что она содержит экземпляр компонента Control:

Server.edl

/* Описание сущности Server. */

entity ping.Server

/* controlimpl - именованный экземпляр компонента ping.Control. */

components {

controlimpl : ping.Control

}

В CDL-описании компонента Control необходимо указать, что он содержит реализацию интерфейса Connection:

Control.cdl

/* Описание компонента Control. */

component ping.Control

/* connectionimpl - реализация интерфейса ping.Connection. */

interfaces {

connectionimpl : ping.Connection

}

В пакете Connection необходимо объявить интерфейс Connection, содержащий два метода – Ping и Pong:

Connection.idl

/* Описание пакета Connection. */

package ping.Connection

interface {

Ping(in UInt32 value, out UInt32 result);

Pong(in UInt32 value, out UInt32 result);

}

Init-описание

Чтобы сущность Client могла вызвать метод сущности Server, между ними требуется создать IPC-канал.

init.yaml

entities:

- name: ping.Client

connections:

- target: ping.Server

id: server_connection

- name: ping.Server

Канал имеет имя server_connection. С помощью локатора сервисов можно получить дескриптор этого канала.