Skip to content

Initial cut at a typed event framework for arti (#230).

eta requested to merge eta/arti:230 into main

This implements a basic typed event broadcast mechanism, as described in #230: consumers of the new tor-events crate can emit TorEvent events, which others can consume via the TorEventReceiver.

Under the hood, the crate uses the async-broadcast (https://github.com/smol-rs/async-broadcast) crate, and a futures::mpsc::UnboundedSender for the event emitters; these are glued together in the EventReactor, which must be run in a background thread for things to work. (This is done so event sending is always cheap and non-blocking, since async-broadcast senders don't have this functionality.)

Additionally, the TorEventKind type is used to implement selective event reception / emission: receivers can subscribe to certain event types (and in fact start out receiving nothing), which filters the set of events they receive. Having no subscribers for a given event type means it won't even be emitted in the first place, making things more efficient.

Merge request reports