Тема: Приведите, пожалуйста, пример простого реактора команд, написанного на С++

Добрый день! Разбираюсь с реакторами. Могли бы привести пример простого реактора команд, написанного на С++? Я имею в виду реактор, который отслеживает выполнение определенной команды acada, и соответствующим образом реагирует на это.
Заранее спасибо!

Re: Приведите, пожалуйста, пример простого реактора команд, написанного на С++

> Ирина
Ну вот пожалуй простейший. Реакция - печать имени команды:

#include "StdAfx.h"
#include "resource.h"
//-----------------------------
//       Класс реактора
//-----------------------------
class CmdReactor : public AcEditorReactor {
protected:
  bool mbAutoInitAndRelease ;
public:
  CmdReactor (const bool autoInitAndRelease =true) ;
  virtual ~CmdReactor () ;
  virtual void Attach () ;
  virtual void Detach () ;
  //------------------------------------------------------
  virtual void commandWillStart(const char * cmdStr);
  virtual void commandEnded(const char * cmdStr);
  virtual void commandCancelled(const char * cmdStr);
  virtual void commandFailed(const char * cmdStr);
  //------------------------------------------------------
} ;
CmdReactor::CmdReactor (const bool autoInitAndRelease) : AcEditorReactor(), mbAutoInitAndRelease(autoInitAndRelease) {
  if (autoInitAndRelease) {
    if (acedEditor) acedEditor->addReactor(this) ;
          else      mbAutoInitAndRelease = false ;
  }
}
//-----------------------------------------------------------------------------
CmdReactor::~CmdReactor () {
  Detach () ;
}
//-----------------------------------------------------------------------------
void CmdReactor::Attach () {
  Detach () ;
  if ( !mbAutoInitAndRelease ) {
    if ( acedEditor ) {
      acedEditor->addReactor (this) ;
      mbAutoInitAndRelease = true ;
    }
  }
}
void CmdReactor::Detach () {
  if ( mbAutoInitAndRelease ) {
    if ( acedEditor ) {
      acedEditor->removeReactor (this) ;
      mbAutoInitAndRelease = false ;
    }
  }
}
void CmdReactor::commandWillStart(const char * cmdStr)
{
  acutPrintf(_T("\nЗапущена команда: %s\n"), cmdStr);
  AcEditorReactor::commandWillStart (cmdStr) ;
}
void CmdReactor::commandEnded(const char * cmdStr)
{
  acutPrintf(_T("\nЗавершена команда: %s\n"), cmdStr);
  AcEditorReactor::commandEnded (cmdStr) ;
}
void CmdReactor::commandCancelled(const char * cmdStr)
{
  acutPrintf(_T("\nОтменена команда: %s\n"), cmdStr);
  AcEditorReactor::commandCancelled (cmdStr) ;
}
void CmdReactor::commandFailed(const char * cmdStr)
{
  acutPrintf(_T("\nНе смогла выполнится команда: %s\n"), cmdStr);
  AcEditorReactor::commandFailed (cmdStr) ;
}
//------------------------------------
//------- Класс приложения
//------------------------------------
class CCmdReactApp : public AcRxArxApp {
private:
  static CmdReactor *pReact;
public:
  CCmdReactApp () : AcRxArxApp () {}
  virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
    AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
    return (retCode) ;
  }
  virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
    // При выгрузке приложения если реактор был создан - удалим его
    if (pReact) delete pReact;
    AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
    return (retCode) ;
  }
  virtual void RegisterServerComponents () {}
  // Обработчик команды STARTREACT
  static void CmdReactSTARTREACT(void)
  {
    if (!pReact) {
      pReact = new CmdReactor();
      if (pReact) {
        acutPrintf(_T("\nСоздали реактор!"));
      } else {
        acutPrintf(_T("\nНе удалось создать реактор!"));
      }
    } else {
      acutPrintf(_T("\nРеактор уже был создан!"));
    }
  }
  // Обработчик команды STOPREACT
  static void CmdReactSTOPREACT(void)
  {
    if (pReact) {
      delete pReact;
      acutPrintf(_T("\nУдалили реактор!"));
    } else {
      acutPrintf(_T("\nРеактор уже был удален или не был создан!"));
    }
    pReact = NULL;
  }
} ;
CmdReactor * CCmdReactApp::pReact = NULL;
//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(CCmdReactApp)
ACED_ARXCOMMAND_ENTRY_AUTO(CCmdReactApp, CmdReact, STARTREACT, STARTREACT, ACRX_CMD_TRANSPARENT, NULL)
ACED_ARXCOMMAND_ENTRY_AUTO(CCmdReactApp, CmdReact, STOPREACT, STOPREACT, ACRX_CMD_TRANSPARENT, NULL)
// -----------------------------------------------------------------------------

Re: Приведите, пожалуйста, пример простого реактора команд, написанного на С++

Большое СПАСИБО, Александр! Очень помогли.
:)