Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Event {
- sparam string
- }
- struct EventCallback{
- func fn(Event)
- }
- struct Emitter {
- mut:
- listeners []EventCallback
- }
- //////////////////////////////////////////////////////
- pub fn (e Event) str() string { return 'event{ $e.sparam }' }
- pub fn (ec &EventCallback) str() string { return 'event_callback{ ' + ptr_str(ec.func) + ' }' }
- pub fn new_emitter() Emitter {
- return Emitter{}
- }
- pub fn (e mut Emitter) connect(f fn(Event)) {
- e.listeners << EventCallback{ f }
- }
- pub fn (e Emitter) emit( sparam string) {
- event := Event{ sparam }
- println('emitting event: $event ...')
- for listener in e.listeners {
- f := listener.func
- f(event)
- }
- }
- //////////////////////////////////////////////////////
- fn cb1(e Event){ println('cb1: $e') }
- fn cb2(e Event){ println('cb2: $e') }
- fn main(){
- mut ready_emitter := new_emitter()
- ready_emitter.connect( cb1 )
- ready_emitter.connect( cb2 )
- ready_emitter.emit('Hello')
- }
- /* produces:
- -------------------------------------------------
- emitting event: event{ Hello } ...
- cb1: event{ Hello }
- cb2: event{ Hello }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement