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.