00001 /* 00002 Пример простейшего агента. 00003 */ 00004 00005 #include <iostream> 00006 00007 // Загружаем основные заголовочные файлы SObjectizer. 00008 #include <so_4/rt/h/rt.hpp> 00009 #include <so_4/api/h/api.hpp> 00010 00011 // Загружаем описание нити таймера и диспетчера. 00012 #include <so_4/timer_thread/simple/h/pub.hpp> 00013 #include <so_4/disp/one_thread/h/pub.hpp> 00014 00015 // Номер версии SObjectizer-а. 00016 // Нужен только для отображения в строке приветствия. 00017 #include <so_4/h/version.hpp> 00018 00019 // C++ описание класса агента. 00020 class a_hello_t 00021 : public so_4::rt::agent_t 00022 { 00023 // Псевдоним для базового типа. 00024 typedef so_4::rt::agent_t base_type_t; 00025 public : 00026 a_hello_t() 00027 : 00028 // Сразу задаем имя агента. 00029 base_type_t( "a_hello" ) 00030 {} 00031 virtual ~a_hello_t() 00032 {} 00033 00034 virtual const char * 00035 so_query_type() const; 00036 00037 virtual void 00038 so_on_subscription() 00039 { 00040 // Нужно подписать наше единственное событие. 00041 so_subscribe( "evt_start", 00042 so_4::rt::sobjectizer_agent_name(), 00043 "msg_start" ); 00044 } 00045 00046 // Обработка начала работы агента в системе. 00047 void 00048 evt_start() 00049 { 00050 std::cout << "Hello, world! This is SObjectizer v.4." 00051 << std::hex << __SO_4_VERSION__ << std::dec << std::endl; 00052 00053 // Завершаем работу примера. 00054 so_4::api::send_msg( 00055 so_4::rt::sobjectizer_agent_name(), 00056 "msg_normal_shutdown", 0 ); 00057 } 00058 }; 00059 00060 // Описание класса агента для SObjectizer-а. 00061 SOL4_CLASS_START( a_hello_t ) 00062 00063 // Одно событие. 00064 SOL4_EVENT( evt_start ) 00065 00066 // И одно состояние. 00067 SOL4_STATE_START( st_normal ) 00068 // С одним событием. 00069 SOL4_STATE_EVENT( evt_start ) 00070 SOL4_STATE_FINISH() 00071 00072 SOL4_CLASS_FINISH() 00073 00074 int 00075 main() 00076 { 00077 // Наш агент. 00078 a_hello_t a_hello; 00079 // И кооперация для него. 00080 so_4::rt::agent_coop_t a_hello_coop( a_hello ); 00081 00082 // Запускаем SObjectizer Run-Time. 00083 so_4::ret_code_t rc = so_4::api::start( 00084 so_4::disp::one_thread::create_disp( 00085 so_4::timer_thread::simple::create_timer_thread(), 00086 so_4::auto_destroy_timer ), 00087 so_4::auto_destroy_disp, 00088 &a_hello_coop ); 00089 if( rc ) { 00090 // Запустить SObjectizer Run-Time не удалось. 00091 std::cerr << "start: " << rc << std::endl; 00092 } 00093 00094 return int( rc ); 00095 }