Skip to content

sandboxzilla/timer_event

Repository files navigation

Timer Event Package

This package provides two classes for working with events:

1. EventThread: A class for creating and managing events with callback routines.
This class can be used independently of TimerEvent for handling general event-driven scenarios without any time-based requirements.

2. TimerEvent: A class that extends EventThread to create timer-based events.
This class is specifically designed for scenarios where events are triggered after a certain period of time or at specific intervals.
Note: Since this class extends the EventThread class it uses most all methods defined and documented in EvenThread class.

EventThread:

The EventThread class creates an event that can be subscribed to and triggered with a payload. The class uses its own thread to broadcast events to subscribers. The callback function is called when the event is triggered with a payload.

The packet dictionary is passed to the callback.
The packet dictionary includes:

All parameters passed in during instantiation of the EventThread.
Minimum items included: ..
"event" = The event name
"dest" = The subscriber name provided when subscribing
"payload" = The object included in the post
"cookie" = The cookie if included when subscribing, otherwise None

The EventThread class has the following methods::

subscribe(name: str, on_event: callable): Subscribes to the event with a callback function.
unsubscribe(name: str): Unsubscribes from the event.
post(payload, **kwargs): Posts an event with a payload to the subscribers.
pause(): Pauses broadcasting events
unpause(): Unpauses the event to continue broadcasting events
stop(): Stops the event processing thread, clears the subscribers list.
        Note:   This can not be used as pause.  Once the EventThread instance is stopped it can not be restarted.
                A new instance must be created after calling stop to continue eventing, but the subscribers list will be lost.

TimerEvent:

The TimerEvent class creates a timed event that triggers at a specified interval. The class uses a Timer object to initiate the timed event. The TimerEvent class can be subscribed to using the subscribe method, which takes a name and a callback function as arguments. The callback function is executed when the timed event is triggered.

The TimerEvent class has the following methods::

subscribe(name: str, on_event: callable): Subscribes to the timed event with a callback function.
unsubscribe(name: str): Unsubscribes from the timed event.
stop(): Stops the timed event.

Example Usage::

from timer_event import TimerEvent, EventThread
import time

 # Create a TimerEvent that triggers every 5 seconds
te = TimerEvent(interval=5.0)

# Subscribe to the TimerEvent
def te_on_event(packet):
    print("TimerEvent triggered")

te.subscribe(name="test_subscriber", on_event=te_on_event)

# Start the TimerEvent
te.start()

# Create an Event
event = EventThread("test_event")

# Subscribe to the Event
def ev_on_event(payload):
    print(f"Event triggered with payload: {payload}")

event.subscribe(name="test_subscriber", on_event=ev_on_event)

# Post an event with a payload
event.post("test_payload")

# Sleep to allow for timer events
time.sleep(10)

# Stop the TimerEvent and Event
te.stop()
event.stop()