Created Date: 16 Mar, 2022 14:17
Last Modifed Date: 16 Mar, 2022 14:17

This page applies to Harlequin v13.1r0 and later; both Harlequin Core and Harlequin MultiRIP

The simplest use for events is as a notification signal, allowing other systems to react to your system's actions without any direct linkage between them. For example, the RIP notifies interested parties of a job interpretation error with one line:

SwEvent(SWEVT_INTERPRET_ERROR, &error, sizeof(error)) ;

The HHR skin registers a handler for this Event in

skinkit.c: static sw_event_handlers error_handlers[] = {
                      {job_error_handler, NULL, 0, SWEVT_INTERPRET_ERROR, SW_EVENT_DEFAULT},
…
} ;
                      SwRegisterHandlers(error_handlers, NUM_ARRAY_ITEMS(error_handlers) ;
                      When it receives the notification Event, it extracts the details of the error:
                      static sw_event_result HQNCALL job_error_handler(void
                      *context, sw_event *event)
                      {
                        SWMSG_ERROR *msg = event->message; UNUSED_PARAM(void *, context);
                          if (msg == NULL || event->length < sizeof(*msg)) return SW_EVENT_CONTINUE;
                        if (msg->fail_job && !controlData.fConfigJobFailed) {
                            /* Capture error detail */ controlData.fConfigJobFailed = TRUE; controlData.jobError.monuid = msg->error_monuid ;
                            …
                        }
                        return SW_EVENT_CONTINUE;
                      }
TEXT

Note that SW_EVENT_CONTINUE should usually be used by handlers of notification Events if the handler were to return SW_EVENT_HANDLED, no further handlers would be notified of the Event. This is likely to be a protocol error for a notification type Event as all handlers would need to know about it.