Commit b255fc9a7ee80db958cff3ae097f1cd46462dde6

Authored by Georg Hopp
1 parent db9b87b2

Add abitility to get a string representation of an event. Used as DEBUG logging of event.

... ... @@ -42,6 +42,8 @@ TR_CLASSVARS_DECL(TR_Event) {
42 42
43 43 #define TR_eventSetData(event, data) (((TR_Event)event)->data = (void *)data)
44 44
  45 +const char * TR_getEventString(TR_Event);
  46 +
45 47 #endif // __TR_EVENT_H__
46 48
47 49 // vim: set ts=4 sw=4:
... ...
... ... @@ -34,8 +34,9 @@ TR_CLASS(TR_EventSubject) {
34 34 };
35 35 TR_INSTANCE_INIT(TR_EventSubject);
36 36 TR_CLASSVARS_DECL(TR_EventSubject) {
37   - size_t nevents;
38   - intptr_t * events;
  37 + const char ** eventStrings;
  38 + size_t nevents;
  39 + intptr_t * events;
39 40 };
40 41
41 42 #include "tr/event.h"
... ... @@ -53,8 +54,8 @@ TR_CLASSVARS_DECL(TR_EventSubject) {
53 54
54 55 #define TR_eventSubjectHasUnhandledEvents(es) ((es)->emitted > 0)
55 56
56   -intptr_t TR__eventSubjectId(TR_class_ptr, size_t);
57   -TR_Event TR_eventSubjectEmit(TR_EventSubject, int, void *);
  57 +intptr_t TR__eventSubjectId(TR_class_ptr, size_t);
  58 +TR_Event TR_eventSubjectEmit(TR_EventSubject, int, void *);
58 59
59 60 #define TR_eventSubjectFinalize(es) ((es)->fin = TRUE)
60 61
... ...
... ... @@ -4,6 +4,7 @@ AUTOMAKE_OPTIONS = subdir-objects
4 4 AM_CFLAGS += -I../include/
5 5
6 6 TREVENT = event.c \
  7 + get_event_string.c \
7 8 event_dispatcher.c \
8 9 event_dispatcher_register_handler.c \
9 10 event_dispatcher_set_hearbeat.c \
... ...
... ... @@ -112,6 +112,13 @@ eventDispatcherCvInit(TR_class_ptr cls)
112 112 TR_EVENT_CREATE(cls, TR_DISPATCHER_EVENT_SHUTDOWN);
113 113 }
114 114
  115 +const char * TR_eventDispatcherStrings[] = {
  116 + "TR_DISPATCHER_EVENT_HEARTBEAT",
  117 + "TR_DISPATCHER_EVENT_USER_WAIT",
  118 + "TR_DISPATCHER_EVENT_DATA_WAIT",
  119 + "TR_DISPATCHER_EVENT_SHUTDOWN"
  120 +};
  121 +
115 122 intptr_t dispatcher_events[TR_DISPATCHER_EVENT_MAX + 1];
116 123 TR_INIT_IFACE(TR_Class, eventDispatcherCtor, eventDispatcherDtor, NULL);
117 124 TR_CREATE_CLASS(
... ... @@ -120,6 +127,7 @@ TR_CREATE_CLASS(
120 127 eventDispatcherCvInit,
121 128 TR_IF(TR_Class)) = {
122 129 {
  130 + TR_eventDispatcherStrings,
123 131 TR_DISPATCHER_EVENT_MAX + 1,
124 132 dispatcher_events
125 133 }
... ...
... ... @@ -20,6 +20,8 @@
20 20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 21 */
22 22
  23 +#include <stdio.h>
  24 +
23 25 #include "trbase.h"
24 26 #include "trdata.h"
25 27 #include "trhash.h"
... ... @@ -35,6 +37,12 @@ TR_eventHandlerHandleEvent(TR_EventHandler this, TR_Event event)
35 37 TR_CLASSVARS(TR_EventHandler, TR_GET_CLASS(this))->event_methods,
36 38 TR_sdbm((unsigned char *)&event->id, sizeof(event->id)));
37 39
  40 + TR_loggerLog(TR_logger, TR_LOGGER_DEBUG,
  41 + "HANDLE: %s event on %p with no. %d\n",
  42 + TR_getEventString(event),
  43 + event->subject,
  44 + event->serial);
  45 +
38 46 if (! handle_func_hv) {
39 47 return 0;
40 48 }
... ...
... ... @@ -20,6 +20,8 @@
20 20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 21 */
22 22
  23 +#include <stdio.h>
  24 +
23 25 #include "trbase.h"
24 26
25 27 #include "tr/event.h"
... ... @@ -28,9 +30,15 @@
28 30 void
29 31 TR_eventHandlerIssueEvent(TR_EventHandler this, TR_Event event)
30 32 {
31   - int i;
32   -
33 33 if (event) {
  34 + int i;
  35 +
  36 + TR_loggerLog(TR_logger, TR_LOGGER_DEBUG,
  37 + "ISSUE: %s event on %p with no. %d\n",
  38 + TR_getEventString(event),
  39 + event->subject,
  40 + event->serial);
  41 +
34 42 for (i=0; i<this->ndispatcher; i++) {
35 43 TR_eventDispatcherEnqueueEvent(this->dispatcher[i], event);
36 44 }
... ...
... ... @@ -32,6 +32,7 @@ static void eventSubjectDtor(void * _this) {}
32 32
33 33 TR_INIT_IFACE(TR_Class, eventSubjectCtor, eventSubjectDtor, NULL);
34 34 TR_CREATE_CLASS(TR_EventSubject, NULL, NULL, TR_IF(TR_Class)) = {
  35 + NULL,
35 36 0,
36 37 NULL
37 38 };
... ...
  1 +/**
  2 + * \file
  3 + *
  4 + * \author Georg Hopp
  5 + *
  6 + * \copyright
  7 + * Copyright © 2014 Georg Hopp
  8 + *
  9 + * This program is free software: you can redistribute it and/or modify
  10 + * it under the terms of the GNU General Public License as published by
  11 + * the Free Software Foundation, either version 3 of the License, or
  12 + * (at your option) any later version.
  13 + *
  14 + * This program is distributed in the hope that it will be useful,
  15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17 + * GNU General Public License for more details.
  18 + *
  19 + * You should have received a copy of the GNU General Public License
  20 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  21 + */
  22 +
  23 +#include <stdint.h>
  24 +
  25 +#include "tr/event.h"
  26 +#include "tr/event_subject.h"
  27 +#include "tr/logger.h"
  28 +#include "trbase.h"
  29 +
  30 +const char *
  31 +TR_getEventString(TR_Event event)
  32 +{
  33 + TR_class_ptr cls = (TR_class_ptr)(event->id >> 8);
  34 + size_t idx = event->id & 0xFF;
  35 +
  36 + idx -= TR_CLASSVARS(TR_EventSubject, cls->parent)->nevents;
  37 +
  38 + return TR_CLASSVARS(TR_EventSubject, cls)->eventStrings[idx];
  39 +}
  40 +
  41 +// vim: set ts=4 sw=4:
... ...
Please register or login to post a comment