pub struct ParallelEventDispatcher<T>where
    T: PartialEq + Eq + Hash + Clone + Send + Sync + 'static,
{ /* private fields */ }
Expand description

In charge of parallel dispatching to all listeners. Owns a map event-variants and Weak-references to their listeners and/or owns Fns.

Implementations§

Adds a ParallelListener to listen for an event_identifier. If event_identifier is a new HashMap-key, it will be added.

Note: If your Enum owns fields you need to consider implementing the Hash- and PartialEq-trait if you want to ignore fields, see second example for an implementation-suggestion.

Examples

Adding a ParallelListener to the dispatcher:

extern crate hey_listen;
use std::sync::Arc;
use hey_listen::{Mutex, ParallelListener, ParallelEventDispatcher, ParallelDispatcherRequest};

#[derive(Clone, Eq, Hash, PartialEq)]
enum Event {
    EventType,
}

struct ListenerStruct {}

impl ParallelListener<Event> for ListenerStruct {
    fn on_event(&mut self, event: &Event) -> Option<ParallelDispatcherRequest> { None }
}

fn main() {
    let listener = Arc::new(Mutex::new(ListenerStruct {}));
    let mut dispatcher: ParallelEventDispatcher<Event> = ParallelEventDispatcher::default();

    dispatcher.add_listener(Event::EventType, &listener);
}

Declaring your own Hash- and PartialEq-trait to bypass hashing on fields:

use std::hash::{Hash, Hasher};
use std::mem::discriminant;

#[derive(Clone)]
enum Event {
    TestVariant(i32),
}

impl Hash for Event {
    fn hash<H: Hasher>(&self, _state: &mut H) {}
}

impl PartialEq for Event {
    fn eq(&self, other: &Event) -> bool {
        discriminant(self) == discriminant(other)
    }
}

impl Eq for Event {}

Adds a Fn to listen for an event_identifier. If event_identifier is a new HashMap-key, it will be added.

Note: If your Enum owns fields, you need to consider implementing the Hash- and PartialEq-trait if you want to ignore these.

Examples

Adding a Fn to the dispatcher:

extern crate hey_listen;
extern crate failure;
#[macro_use]
extern crate failure_derive;

use hey_listen::{Mutex, ParallelEventDispatcher, ParallelDispatcherRequest};
use std::sync::Arc;

#[derive(Clone, Eq, Hash, PartialEq)]
enum Event {
    EventType,
}

struct EventListener {
    used_method: bool,
}

impl EventListener {
    fn test_method(&mut self, _event: &Event) {
        self.used_method = true;
    }
}

fn main() {
    let listener = Arc::new(Mutex::new(EventListener { used_method: false }));
    let mut dispatcher: ParallelEventDispatcher<Event> = ParallelEventDispatcher::default();
    let weak_listener_ref = Arc::downgrade(&Arc::clone(&listener));

    let closure = Box::new(move |event: &Event| -> Option<ParallelDispatcherRequest> {
        if let Some(listener) = weak_listener_ref.upgrade() {
            listener.lock().test_method(&event);
            None
        } else {
            Some(ParallelDispatcherRequest::StopListening)
        }
    });

    dispatcher.add_fn(Event::EventType, closure);
}

Immediately after calling this method, the dispatcher will attempt to build a thread-pool with num amount of threads. If internals fail to build, BuildError is returned.

Note: Failing to build the thread-pool will result in keeping the prior thread-pool, if one has been built before. If none has been built, none will be used; being default.

All ParallelListeners listening to a passed event_identifier will be called via their implemented on_event-method. Fns returning an Option wrapping ParallelDispatcherRequest with ParallelDispatcherRequest::StopListening will cause them to be removed from the event-dispatcher.

Trait Implementations§

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The alignment of pointer.
The type for initializers.
Initializes a with the given initializer. Read more
Dereferences the given pointer. Read more
Mutably dereferences the given pointer. Read more
Drops the object pointed to by the given pointer. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.