sample/hello_world/main.cpp

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 }

Документация по SObjectizer. Последние изменения: Thu Jan 12 10:52:50 2006. Создано системой  doxygen 1.4.6-NO
Hosted by uCoz