Skip to content
This repository was archived by the owner on Oct 28, 2024. It is now read-only.

lilboyspirit/EventEmitter.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EventEmitter

Events in julia


Julia Programming Language Logo

Spirit's discord server Build Status

Julia package to easly implement event pattern in julia

Installation

using Pkg; Pkg.add("EventEmitter")

License

All code licensed under the MIT license.

Getting started

First run

using EventEmitter

Construct an Event

myevent = Event()

You can pass callback functions as arguments

myfunction() = println("function")
myevent = Event(myfunction, () -> println("Arrow function"))

Listeners are on by default. change this by setting once

myevent = Event((x) -> print(x); once=true)

Or construct listeners manually and pass them

# Listener(callback, once)
myevent = Event(Listener(() -> 1), Listener(() -> 2, true))

Use on!() or once!() to add listeners

on!(myevent) do
  return "called everytime"
end
once!(myevent) do
  return "called once"
end

Emit an event by calling it or using emit!()

myevent() # [1, 2, "called everytime", "called once"]
emit!(myevent) # [1, "called everytime"]

Listeners are called in order

myevent = Event(() -> 1, () -> 2)
on!(myevent, () -> 3)

myevent() # [1, 2, 3]

Use prependlisteners!() to prepend listeners

prependlisteners!(myevent, () -> 4, () -> 5)
myevent() # [4, 5, 1, 2, 3]

Use off!() to remove a Listener

*off!() returns the Listener it removes, so doing off!(event)() will call it*

off!(myevent)() # 3 - (last) equivalent to `off!(myevent, 0)()`
off!(myevent, 1)() # 4 - (first)
off!(myevent, -1)() # 1 - (before last)
myevent() # [5, 2]

Construct collections of Events (arrays, tuples, named tuples and dictionaries)

event1 = Event(() -> 1)
event2 = Event(() -> 2)
arr = [event1, event2]
tuple = (event1, event2)
namedtuple = (a=event1, b=event2)
dict = Dict(:a => event1, :b => event2)

Emit the collections

*emitting a dict will give almost random order for the events*

emit!(arr) # [[1], [2]]
emit!(tuple) # [[1], [2]]
emit!(namedtuple) # [[1], [2]]
emit!(dict) # [[1], [2]]

About

An event emitter package to implement the event pattern in Julia programming language

Topics

Resources

License

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages