Параллельное и распределенное программирование на С++ (Хьюз, Хьюз) - страница 355

анды,

blackboard -ORBIIOPAddr inet:porthos:12458

По этой команде запускается наша программа «классной доски» с подключением к порту 12458 хоста porthos. Запуск CORBA-объекта зависит от используемой CORBA-реализации. В данном случае мы используем «открытую» CORBA-реализацию Mico [25] При выполнении программы blackboard реализуется экземпляр «классной доски», который в свою очередь порождает источники знаний. В созданных источниках знаний жестко закодирован номер порта, по которому они будут связываться с «классной доской». Фрагмент кода реализации источника знаний, который связывается с CORBA - ориентированным объектом «классной доски», представлен в листинге 13.7.

>// Листинг 13.7. Код источника знаний, который связывается

>// с CORBA-ориентированной «классной доской»

>1 #include «pvm3.h»

>2 using namespace std;

>3 #include

>4 #include

>5 #include

>6 #include

>7 #include «black_board_impl.h» 8

>9 int main(int argc, char *argv[])

>10 {

>11 CORBA::ORB_var Orb = CORBA::ORB_init(argc, argv,«mico-local-orb»);

>12 CORBA::Object_yar Obj =Orb->bind(«IDL:black_board:1.0»,«inet:por thos:12 4 5 8»);

>13 courses Courses;

>14 //...

>15 //...

>16 black_board_var BlackBoard = black_board::_narrow(Obj);

>17

>18 int Pid;

>19 //...

>20 //... 21

>22 cout « «Источник знаний создан.» « endl;

>23 Courses.length(2);

>24 Courses[0] = 255551;

>25 Courses[l] = 253212;

>26 string FileName;

>27 strstream Buffer;

>28 Pid = pvm_mytid();

>29 Buffer « «Результат.» « Pid « ends;

>30 Buffer » FileName;

>31 ofstream Fout(FileName.data());

>32 BlackBoard->suggestionsForMajor(Courses);

>33 Fout.close();

>34 pvm_exit();

>35 return(0);

>36 } 37

В строке 11 (см. листинг13.7) инициализируется ORB брокер . При выполнении строки 12 осу щ ествляется связывание имени объекта black_board с портом 12458 и возвра щ ается ссылка на CORBA-объект в переменной Obj. Строку 16 можно расценивать как разновидность операции приведения типа, чтобы Переменная BlackBoard ссылалась на объект «правильного размера». После того как источник знаний реализовал объект BlackBoard, он может вызывать любой метод, объявленный в интерфейсе black_board, код которого приведен в листинге 13.1. Обратите внимание на создание в строке 13 объекта Courses. Вспомните, что тип courses изначально был определен как CORBA-тип sequence. Здесь источник знаний использует класс courses, созданный во время IDL-компиляции. Добавление элементов в этот класс можно представить как добавление элементов в любой массив. При выполнении строк 24 и 25 в объект