All Projects → fukamachi → event-emitter

fukamachi / event-emitter

Licence: BSD-2-Clause License
Event mechanism for Common Lisp objects.

Programming Languages

common lisp
692 projects

Event Emitter

Event Emitter provides an event mechanism like Node.js for Common Lisp objects.

Mostly ported from Node.js 'events' module.

Usage

;; Defining Event Emitter class.
(defclass person (event-emitter)
  ((name :initarg :name
         :reader name)))

(defvar *user*
  (make-instance 'person :name "Eitaro Fukamachi"))

;; Attach a event listener for an event ':say-hi'.
(on :say-hi *user*
    (lambda () (format t "Hi!")))

;; *user* says 'Hi!' when an event ':say-hi' is invoked.
(emit :say-hi *user*)
;-> Hi!

(emit :say-hi *user*)
;-> Hi!

(emit :say-hi *user*)
;-> Hi!

;; Attach an one time event listener.
(once :say-hi *user*
      (lambda ()
        (format t "How's it going?")))

;; 'Hi!' and "How's it going?" will be printed.
(emit :say-hi *user*)
;-> Hi!
;   How's it going?

;; *user* doens't say "How's it going?" anymore.
(emit :say-hi *user*)
;-> Hi!

(emit :say-hi *user*)
;-> Hi!

'event-glue'

There's already similar library named event-glue which you may like to know.

API

[Class] event-emitter

Base standard class for 'event-emitter's.

(defclass person (event-emitter)
  ((name :initarg :name)))

[Strucuture] event-emitter*

Base strucuture class for 'event-emitter's.

(defstruct (person :include event-emitter*)
  name)

[Function] (add-listener object event listener)
[Function] (on event object listener)

Adds a listener to the end of the listeners array for the specified event.

(on :connection server
    (lambda (stream) ...))

NOTE: add-listener and on takes 'object' and 'event' the opposite order.

[Function] (once event object listener)

Adds a one time listener for the event. This listener is invoked only the next time the event is fired, after which it is removed.

(once :connection server
      (lambda (stream) ...))

[Function] (remove-listener object event listener)

Removes a listener from the listener array for the specified event.

(defun connection-cb (stream)
  ...)

(on :connection server #'connection-cb)
(remove-listener server :connection #'connection-cb)

[Function] (remove-all-listeners object &optional event)

Removes all listeners, or those of the specified event.

(remove-all-listeners server)
(remove-all-listeners server :connection)

[Function] (listeners object event)

Returns an array of listeners for the specified event.

[Function] (emit event object &rest args)

Executes each of the listeners in order with the supplied arguments.

Returns T if the event had listeners, NIL otherwise.

[Function] (listener-count object event)

Returns the number of listeners for a given event.

Copyright

Copyright (c) 2014 Eitaro Fukamachi ([email protected])

License

Licensed under the BSD 2-Clause License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].