From e960afe8f6263689bc98c53612cec04d859f8987 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 3 Oct 2020 15:10:38 +1000 Subject: [PATCH] Support OnMultiple --- .gitignore | 2 ++ v2/internal/runtime/goruntime/events.go | 17 +++++++++++++++-- v2/test/runtime/runtime.go | 3 +++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index bc455bc50..07e284f19 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/v2/internal/runtime/goruntime/events.go b/v2/internal/runtime/goruntime/events.go index 850166d1c..d370f5fec 100644 --- a/v2/internal/runtime/goruntime/events.go +++ b/v2/internal/runtime/goruntime/events.go @@ -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{ diff --git a/v2/test/runtime/runtime.go b/v2/test/runtime/runtime.go index f3c10fe55..632937332 100644 --- a/v2/test/runtime/runtime.go +++ b/v2/test/runtime/runtime.go @@ -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 }