Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

ggclearpublisher(3) [debian man page]

ggAddObserver(3)							GGI							  ggAddObserver(3)

NAME
ggAddObserver, ggDelObserver, ggNotifyObservers, ggClearPublisher - Simple observer framework SYNOPSIS
#include <ggi/gg.h> typedef int (ggfunc_observer_update)(void *arg, int flag, void *data); struct gg_observer { ggfunc_observer_update *update; void *arg; GG_LIST_ENTRY(gg_observer) _others; }; struct gg_publisher { GG_LIST_HEAD(gg_observer_list, gg_observer) observers; }; #define INIT_PUBLISHER(pub) GG_LIST_INIT(&((pub)->observers)) struct gg_observer * ggAddObserver(struct gg_publisher *, ggfunc_observer_update *, void *); void ggDelObserver(struct gg_observer *); void ggNotifyObservers(struct gg_publisher *, int, void *); void ggClearPublisher(struct gg_publisher *); DESCRIPTION
The observer pattern is very useful and commonly found in many software packages, even if not explicitly called that way. The problem is that every different software will often use a particular implementation of this pattern, depending on a specific use-case. So usually everybody prefers to roll its own. LibGG observers are defined as part of the forth-coming api infrastructure, as light-weight cooperation model between libraries. The model is very simple: struct gg_publisher defines a channel on which observers can be registered. An observer is simply an opaque value and a callback receiving that value as first argument, a flag, and an opaque channel-specific message. The idea is that if you known the observable you're listen- ing on, you know the semantics behind the flag and message. When the observable is triggered, all observers' callbacks will be fired. ggAddObserver registers a new observer on a publisher. ggDelObserver unregisters the given observer from its publisher and frees it. ggNotifyObservers triggers all observers update functions for that publisher. The flag and message will be given to the observers' update callbacks. An observer *must not* call ggDelObserver on itself in the update function to unregister. Instead it must return a non-zero value. ggClearPublisher frees all observers registered on the publisher. If at least one is left, then there is probably a logical error in the observer code, since it must already have been notified some- how of the publisher going down, and unregistered all callbacks before. RETURN VALUES
ggAddObserver returns a newly constructed observer hook. Normally, the caller will keep a reference to it to call if he needs to call ggDe- lObserver later. EXAMPLE
#include <ggi/gg.h> #include <stdio.h> int update(void* o, int f, void *d) { printf("update called for observer %p, flag=%i, data=%p ", o, f ,d); if (o == 1) { return 1; /* unregister */ } return 0; } int main() { struct gg_publisher pub; struct gg_observer *o1, *o2; INIT_PUBLISHER(&pub); o1 = ggAddObserver(&pub, update, (void*)1); o2 = ggAddObserver(&pub, update, (void*)2); ggNotifyObservers(&pub, 0, NULL); ggNotifyObservers(&pub, 1, NULL); ggClearPublisher(&pub); return 0; } libgg-1.0.x 2005-08-26 ggAddObserver(3)

Check Out this Related Man Page

sysevent_get_vendor_name(3SYSEVENT)			  System Event Library Functions		       sysevent_get_vendor_name(3SYSEVENT)

NAME
sysevent_get_vendor_name, sysevent_get_pub_name, sysevent_get_pid - get vendor name, publisher name or processor ID of event SYNOPSIS
cc [flag ...] file ...-lsysevent [library ...] #include <libsysevent.h> char *sysevent_get_vendor_name(sysevent_t *ev); char *sysevent_get_pub_name(sysevent_t *ev); pid_t sysevent_get_pid(sysevent_t *ev); PARAMETERS
ev handle to a system event object DESCRIPTION
The sysevent_get_pub_name() function returns the publisher name for the sysevent handle, ev. The publisher name identifies the name of the publishing application or kernel subsystem of the sysevent. The sysevent_get_pid() function returns the process ID for the publishing application or SE_KERN_PID for sysevents originating in the ker- nel. The publisher name and PID are useful for implementing event acknowledgement. The sysevent_get_vendor_name() function returns the vendor string for the publishing application or kernel subsystem. A vendor string is the company's stock symbol that provided the application or kernel subsystem that generated the system event. This information is useful for filtering sysevents for one or more vendors. The interface manages the allocation of the vendor and publisher name strings, but it is the caller's responsibility to free the strings when they are no longer needed by calling free(3MALLOC). If the new vendor and publisher name strings cannot be created, sysevent_get_ven- dor_name() and sysevent_get_pub_name() return a null pointer and may set errno to ENOMEM to indicate that the storage space available is insufficient. EXAMPLES
Example 1 Parse sysevent header information. The following example parses sysevent header information from an application's event handler. char *vendor; char *pub; void event_handler(sysevent_t *ev) { if (strcmp(EC_PRIV, sysevent_get_class_name(ev)) != 0) { return; } vendor = sysevent_get_vendor_name(ev); if (strcmp("SUNW", vendor) != 0) { free(vendor); return; } pub = sysevent_get_pub_name(ev); if (strcmp("test_daemon", pub) != 0) { free(vendor); free(pub); return; } (void) kill(sysevent_get_pid(ev), SIGUSR1); free(vendor); free(pub); } ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Evolving | +-----------------------------+-----------------------------+ |MT-Level |MT-Safe | +-----------------------------+-----------------------------+ SEE ALSO
malloc(3MALLOC), attributes(5) SunOS 5.11 17 Mar 2004 sysevent_get_vendor_name(3SYSEVENT)
Man Page