Support OnMultiple

This commit is contained in:
Lea Anthony 2020-10-03 15:10:38 +10:00
commit e960afe8f6
No known key found for this signature in database
GPG key ID: 33DAF7BB90A58405
3 changed files with 20 additions and 2 deletions

2
.gitignore vendored
View file

@ -22,3 +22,5 @@ v2/test/**/frontend/dist
v2/test/**/build/
v2/test/frameless/icon.png
v2/test/hidden/icon.png
v2/internal/ffenestri/runtime.c
v2/internal/runtime/assets/desktop.js

View file

@ -9,6 +9,7 @@ import (
type Events interface {
On(eventName string, callback func(optionalData ...interface{}))
Once(eventName string, callback func(optionalData ...interface{}))
OnMultiple(eventName string, callback func(optionalData ...interface{}), maxCallbacks int)
Emit(eventName string, optionalData ...interface{})
}
@ -24,7 +25,7 @@ func newEvents(bus *servicebus.ServiceBus) Events {
}
}
// On pass through
// On registers a listener for a particular event
func (r *event) On(eventName string, callback func(optionalData ...interface{})) {
eventMessage := &message.OnEventMessage{
Name: eventName,
@ -34,7 +35,8 @@ func (r *event) On(eventName string, callback func(optionalData ...interface{}))
r.bus.Publish("event:on", eventMessage)
}
// On pass through
// Once registers a listener for a particular event. After the first callback, the
// listener is deleted.
func (r *event) Once(eventName string, callback func(optionalData ...interface{})) {
eventMessage := &message.OnEventMessage{
Name: eventName,
@ -44,6 +46,17 @@ func (r *event) Once(eventName string, callback func(optionalData ...interface{}
r.bus.Publish("event:on", eventMessage)
}
// OnMultiple registers a listener for a particular event, for a given maximum amount of callbacks.
// Once the callback has been run `maxCallbacks` times, the listener is deleted.
func (r *event) OnMultiple(eventName string, callback func(optionalData ...interface{}), maxCallbacks int) {
eventMessage := &message.OnEventMessage{
Name: eventName,
Callback: callback,
Counter: maxCallbacks,
}
r.bus.Publish("event:on", eventMessage)
}
// Emit pass through
func (r *event) Emit(eventName string, optionalData ...interface{}) {
eventMessage := &message.EventMessage{

View file

@ -26,6 +26,9 @@ func (r *RuntimeTest) WailsInit(runtime *wails.Runtime) error {
r.runtime.Events.Once("testeventonce", func(optionalParams ...interface{}) {
println("I only get called once!")
})
r.runtime.Events.OnMultiple("testeventmultiple", func(optionalParams ...interface{}) {
println("I only get called 3 times!")
}, 3)
return nil
}