AAO DRAMA/DRAMA2 C++ Interface
DRAMA C++11 and later interface
dramahello.cpp
/* D R A M A H E L L O
* Module name:
dramahello.cpp
* Function:
DRAMA 2 Hello World.
* Description:
Responds to the following commands
HELLO - Outputs message.
EXIT - Cause this task to exit.
* Language:
C++
* Copyright (c) Australian Astronomical Observatory, 2014.
Not to be used for commercial purposes without permission.
No warranty of any form unless subject to a specific agreement.
* Support: Tony Farrell, AAO
* @(#) $Id$
*/
static const char *rcsId="@(#) $Id$";
static void *use_rcsId = (0 ? (void *)(&use_rcsId) : (void *) &rcsId);
#include "drama.hh"
#include "drama/sds.hh"
#include "drama2_err.h"
class HelloAction : public drama::MessageHandler {
public:
private:
/*
* Send a message to the user. (Method of MessageHandler)
*/
MessageUser("Hello World - from DRAMA 2, action %", GetActionName());
/*
* Access any argument to this action.
* (GetEntry() is a method of MesageHandler.)
*/
if (Arg)
{
/*
* Print the argument.
*/
/*
* If the message is in standard format, the name
* of the first item will be Argument1.
*/
std::string MyArgument;
Arg.Get("Argument1", &MyArgument);
MessageUser(MyArgument);
/*
* Alternatively,
*/
/*
* And another version
*/
MessageUser("Argument is \"%\"", MyArgument);
}
StatusType status = DRAMA2__TEST;
drama::ErsReport(&status,
"Demonstration of error report with format of value %", 33);
/*
* Tell DRAMA the action has ended.
*/
}
};
class DramaHello : public drama::Task {
private:
HelloAction HelloActionObj;
public:
DramaHello() : drama::Task("DRAMAHELLO") {
Add("HELLO", drama::MessageHandlerPtr(&HelloActionObj, drama::nodel()));
}
}
};
int main()
{
try
{
// Make this program a DRAMA task named ticker
DramaHello task;
// Process DRAMA messages.
task.RunDrama();
}
catch (const drama::Exception &e)
{
fprintf(stderr,"DRAMA Exception thrown and caught in main\n");
fprintf(stderr,"%s\n", e.toString().c_str());
fprintf(stderr,"DRAMA Status = 0X%lx, %s\n",
static_cast<long int>(e.dramaStatus()),
e.dramaStatusStr().c_str());
exit (e.statusAsSysExitCode());
}
return 0;
}
sds::Id Argument() const
Return any SDS argument to the action entry.
Definition entryinfo.hh:147
virtual int statusAsSysExitCode() const
Return a system exit code based on the DRAMA Status.
Definition exception.hh:424
virtual std::string toString() const
Return the exception string.
virtual std::string dramaStatusStr() const
Return the DRAMA Status code converted to a DRAMA.
virtual StatusType dramaStatus() const
Return the DRAMA Status code associated with the exception.
Definition exception.hh:404
An Exception class for exceptions thrown by DRAMA V2 classes.
Definition exception.hh:164
virtual const EntryInfo & GetEntry()
Return the action entry details.
Definition messagehandler.hh:335
virtual Request MessageReceived()=0
Method invoked by DRAMA to handle the message.
virtual void MessageUser(const std::string &text) const
Use DRAMA to send a message to the user.
virtual const sds::PrintObjectCR & SdsListToUser() const
Get a reference to an SDS printer object which can be used to list an SDS object using MessageUser.
A class which implements a DRAMA Message Handler.
Definition messagehandler.hh:138
Class used by Obey and Kick handlers to indicate rescheduling requirements.
Definition request.hh:78
virtual void Add(const std::string &name, MessageHandlerPtr obj, const std::string &descr="")
Add an action to the task.
Definition task.hh:696
A class which implements a DRAMA task.
Definition task.hh:441
virtual void List() const
List the contents of the structure to standard output.
Definition sds.hh:2099
void Get(const unsigned long length, T *const data, unsigned long *actlen=nullptr, const unsigned long offset=0) const
Get data from an SDS item.
Definition sds.hh:1547
virtual std::string toString(int maxlen=200)
Convert the structure to a string.
Definition sds.hh:2918
A C++ Interface to the handling SDS structures.
Definition sds.hh:428
DRAMA 2 main include file.
void CreateRunDramaTask()
Create and run a DRAMA task, with standard exception handling.
Definition task.hh:1322
void ErsReport(const std::string &mes, StatusType *status)
Report a std::string via ERS.
std::shared_ptr< MessageHandler > MessageHandlerPtr
This type is used for passing MessageHandler object addresses around.
Definition messagehandler.hh:101
@ End
Request that the action complete.
Request SimpleExitAction(drama::MessageHandler *messageHandler)
A function which implements a simple exit action.
The drama namespace contains all the classes, types etc of the DRAMA 2 implementation.
Definition drama.hh:93
DRAMA 2 include file - Sds class definition.
Declare an operator to be used as a deletion operator by std::shared_ptr.
Definition task.hh:114