#include <smirtl.hxx>

class EvtBuilder: public SmiProxy
{
// Command Handler
void smiCommandHandler();
// Internal functions
void do_start();
void do_stop();
public:
// Constructor
EvtBuilder(char *domain, char *object): 
    SmiProxy(object) 
    { 
        attach(domain);
    }
};

main(int argc, char *argv[])
{
    int num = 123;
    // Creatting the Proxy
    EvtBuilder evtBuilder(argv[1], "EVT_BUILDER");

    // Setting Volatile
    evtBuilder.setVolatile();

    // Setting object parameters
    evtBuilder.setParameter("NEXT_RUN_NUMBER",123);
    evtBuilder.setParameter("NEXT_RUN_TYPE","PHYSICS");

    // Setting Object states
    evtBuilder.setState("READY");
    while(1)
    {
        pause();
    }
}

void EvtBuilder::smiCommandHandler()
{
    if(testAction("START"))
        do_start();
    else if(testAction("STOP"))
        do_stop();
    else if(testAction("RECOVER"))
        do_stop();
}

void EvtBuilder::do_start()
{
    // Getting Action Parameters
    int runNumber = getParameterInt("RUN_NR");
    char *runType = getParameterString("RUN_TYPE");

    // Setting Object parameters
    runNumber++;
    setParameter("NEXT_RUN_NUMBER",runNumber);
    setParameter("NEXT_RUN_TYPE",runType);

    setState("RUNNING");
}

void EvtBuilder::do_stop()
{
    setState("READY");
}