/* Пример простейшего агента. */ #include <iostream> #include <ace/OS_main.h> // Загружаем основные заголовочные файлы SObjectizer. #include <so_4/rt/h/rt.hpp> #include <so_4/api/h/api.hpp> // Загружаем описание нити таймера и диспетчера. #include <so_4/timer_thread/simple/h/pub.hpp> #include <so_4/disp/one_thread/h/pub.hpp> // Номер версии SObjectizer-а. // Нужен только для отображения в строке приветствия. #include <so_4/h/version.hpp> // C++ описание класса агента. class a_hello_t : public so_4::rt::agent_t { // Псевдоним для базового типа. typedef so_4::rt::agent_t base_type_t; public : a_hello_t() : // Сразу задаем имя агента. base_type_t( "a_hello" ) {} virtual ~a_hello_t() {} virtual const char * so_query_type() const; virtual void so_on_subscription() { // Нужно подписать наше единственное событие. so_subscribe( "evt_start", so_4::rt::sobjectizer_agent_name(), "msg_start" ); } // Обработка начала работы агента в системе. void evt_start() { std::cout << "Hello, world! This is SObjectizer v.4." << std::hex << __SO_4_VERSION__ << std::dec << std::endl; // Завершаем работу примера. so_4::api::send_msg( so_4::rt::sobjectizer_agent_name(), "msg_normal_shutdown", 0 ); } }; // Описание класса агента для SObjectizer-а. SOL4_CLASS_START( a_hello_t ) // Одно событие. SOL4_EVENT( evt_start ) // И одно состояние. SOL4_STATE_START( st_normal ) // С одним событием. SOL4_STATE_EVENT( evt_start ) SOL4_STATE_FINISH() SOL4_CLASS_FINISH() int main( int, char ** ) { // Наш агент. a_hello_t a_hello; // И кооперация для него. so_4::rt::agent_coop_t a_hello_coop( a_hello ); // Запускаем SObjectizer Run-Time. so_4::ret_code_t rc = so_4::api::start( so_4::disp::one_thread::create_disp( so_4::timer_thread::simple::create_timer_thread(), so_4::auto_destroy_timer ), so_4::auto_destroy_disp, &a_hello_coop ); if( rc ) { // Запустить SObjectizer Run-Time не удалось. std::cerr << "start: " << rc << std::endl; } return int( rc ); }
Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:45 2008. Создано системой 1.5.6 |