# mco_register_eventname_handler()

> This function registers a synchronous event handler for an `add`, `delete` or `checkpoint` event.

### Prototype

>         MCO_RET	mco_register_eventname_handler(	/*IN*/ mco_trans_h trans,
>                                  /*IN*/ mco_eventname_handler,
>                                  /*IN*/ void *param);

### Arguments

trans | A transaction handle returned by `mco_trans_start()`
mco_eventname_handler | A pointer to the handler function
param | A pointer to user-defined storage

### Description

> This function registers a call-back function that the runtime will invoke whenever the event eventname occurs. Events are defined in the database schema by specifying the event type (`new`, `delete`, `update` or `checkpoint`) and the name of the handler function to be called. Multiple handlers for a given eventname can be registered. The void `param` can be used to pass any user-defined data structure between the application and the event handler.

### Return Codes

MCO_S_OK | The handler was registered successfully
MCO_E_ACCESS | Transaction is not `MCO_READ_WRITE`

### Example

        Schema snippet:

        declare database evdb;

        class MyClass
        {
            uint4 u4;

            event <new>     newEvent;
            list;
        };

        evdb.h snippet:

        /* class MyClass mehtods */
        MCO_RET      MyClass_new                          ( mco_trans_h t, /*OUT*/ MyClass *handle );
        ...
        typedef MCO_RET (*mco_newEvent_handler)( mco_trans_h t, MyClass * obj, MCO_EVENT_TYPE et, /*INOUT*/ void *param);

        MCO_RET      mco_register_newEvent_handler        ( mco_trans_h t, mco_newEvent_handler handler, void * param );

        MCO_RET      mco_unregister_newEvent_handler      ( mco_trans_h t, mco_newEvent_handler handler);

        Application snippet:

        MCO_RET new_handler(mco_trans_h t, MyClass* obj, MCO_EVENT_TYPE et,  /*INOUT */void* param)
        {
            autoid_t id;
            MyClass_autoid_get(obj, &id);
            printf("\tEvent \"Object New\" : object (%d) created\n", autoid2int(id));
            return MCO_S_OK;
        }

        int register_events(mco_db_h db)
        {
            MCO_RET rc;
            mco_trans_h t;

            mco_trans_start(db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t);
            rc = mco_register_newEvent_handler( t, &new_handler, (void*)0 );

            ...
        }

Related Topics