sample/hello_world/main.cpp

/*
  Пример простейшего агента.
*/

#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. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo