To use this cl-event, start out with creating a callback and a stream:
(in-package :event) (defun my-callback (s) ...) (defvar s ( ... open stream ... )) ; initialize libevent (event-init)
and then either explicitly calling functions from the API or using a convenience function instead.
Here are the functions that you'll need to call in order to create an event and have it scheduled:
; create an instance of an event (defvar e (make-instance 'event)) ; associate event with a callback and a stream (event-set e s (make-flags :ev-persist t) 'my-callback s) ; add event to libevent event-base (event-add e)
If you would rather use the convenience function add-event-callback, you won't need to manually instantiate an event as was illustrated in the "Explicit Calls" section.
Consider that we have defiend a CLOS object (elsewhere) containing a stream and other stuff called CONNECTION and a method called READ-CONNECTION that takes a CONNECTION object as argument. You can can implicitly create an event, set the callback on it, and then schedule the event with the the add-event-callback convenience function:
(add-event-callback (connection-stream connection) (make-flags :ev-persist t) 'read-connection connection)
; main loop of libevent, calls my-callback (or read-connection) as defined above whenever there is anything to read on the given stream (event-dispatch)