From 35ecc599b06115d5c5a41d931777cb873114de09 Mon Sep 17 00:00:00 2001 From: "Richard T. Carback III" <rick.carback@gmail.com> Date: Wed, 14 Jun 2023 17:38:27 +0000 Subject: [PATCH] Implement changes for the multiListener update --- wasm/collective.go | 94 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 4 deletions(-) diff --git a/wasm/collective.go b/wasm/collective.go index 5c2eb771..36768830 100644 --- a/wasm/collective.go +++ b/wasm/collective.go @@ -48,6 +48,16 @@ func newRemoteKvJS(api *bindings.RemoteKV) map[string]any { "GetMapElement": js.FuncOf(rkv.GetMapElement), "ListenOnRemoteKey": js.FuncOf(rkv.ListenOnRemoteKey), "ListenOnRemoteMap": js.FuncOf(rkv.ListenOnRemoteMap), + "GetAllRemoteKeyListeners": js.FuncOf( + rkv.GetAllRemoteKeyListeners), + "GetRemoteKeyListeners": js.FuncOf(rkv.GetRemoteKeyListeners), + "DeleteRemoteKeyListener": js.FuncOf( + rkv.DeleteRemoteKeyListener), + "GetAllRemoteMapListeners": js.FuncOf( + rkv.GetAllRemoteMapListeners), + "GetRemoteMapListeners": js.FuncOf(rkv.GetRemoteMapListeners), + "DeleteRemoteMapListener": js.FuncOf( + rkv.DeleteRemoteMapListener), } return rkvMap @@ -403,11 +413,12 @@ func (r *RemoteKV) ListenOnRemoteKey(_ js.Value, args []js.Value) any { } promiseFn := func(resolve, reject func(args ...any) js.Value) { - err := r.api.ListenOnRemoteKey(key, version, cb, localEvents) + id, err := r.api.ListenOnRemoteKey(key, version, cb, + localEvents) if err != nil { reject(exception.NewTrace(err)) } else { - resolve() + resolve(id) } } @@ -439,17 +450,92 @@ func (r *RemoteKV) ListenOnRemoteMap(_ js.Value, args []js.Value) any { } promiseFn := func(resolve, reject func(args ...any) js.Value) { - err := r.api.ListenOnRemoteMap(mapName, version, cb, localEvents) + id, err := r.api.ListenOnRemoteMap(mapName, version, cb, + localEvents) if err != nil { reject(exception.NewTrace(err)) } else { - resolve() + resolve(id) } } return utils.CreatePromise(promiseFn) } +// GetAllRemoteKeyListeners returns a JSON list of { key: [id, id, id, ...] }, +// where key is the key for the listener and the list is an list of integer ids +// of each listener. +func (r *RemoteKV) GetAllRemoteKeyListeners() any { + return r.api.GetAllRemoteKeyListeners() +} + +// GeRemoteKeyListeners returns a JSON list of [id, id, id, ...], +// where the list is an list of integer ids of each listener. +// +// Parameters: +// - args[0] - the key to look at +func (r *RemoteKV) GetRemoteKeyListeners(_ js.Value, args []js.Value) any { + key := args[0].String() + return r.api.GetRemoteKeyListeners(key) +} + +// DeleteRemoteKeyListener deletes a specific listener for a key. +// +// Parameters: +// - args[0] - the key to delete for +// - args[1] - the id of the listener +func (r *RemoteKV) DeleteRemoteKeyListener(_ js.Value, args []js.Value) any { + key := args[0].String() + id := args[1].Int() + + promiseFn := func(resolve, reject func(args ...any) js.Value) { + err := r.api.DeleteRemoteKeyListener(key, id) + if err != nil { + reject(execption.NewTrace(err)) + } else { + resolve() + } + } + return utils.CreatePromiseFn(promisFn) +} + +// GetAllRemoteMapListeners returns a JSON list of { key: [id, id, id, ...] }, +// where key is the key for the listener and the list is an list of integer ids +// of each listener. +func (r *RemoteKV) GetAllRemoteMapListeners() any { + return r.api.GetAllRemoteMapListeners() +} + +// GeRemoteMapListeners returns a JSON list of [id, id, id, ...], +// where the list is an list of integer ids of each listener. +// +// Parameters: +// - args[0] - the key to look at +func (r *RemoteKV) GetRemoteMapListeners(_ js.Value, args []js.Value) any { + key := args[0].String() + return r.api.GetRemoteMapListeners(key) +} + +// DeleteRemoteMapListener deletes a specific listener for a key. +// +// Parameters: +// - args[0] - the mapName to delete for +// - args[1] - the id of the listener +func (r *RemoteKV) DeleteRemoteMapListener(_ js.Value, args []js.Value) any { + mapName := args[0].String() + id := args[1].Int() + + promiseFn := func(resolve, reject func(args ...any) js.Value) { + err := r.api.DeleteRemoteMapListener(mapName, id) + if err != nil { + reject(execption.NewTrace(err)) + } else { + resolve() + } + } + return utils.CreatePromiseFn(promisFn) +} + //////////////////////////////////////////////////////////////////////////////// // RemoteStore // //////////////////////////////////////////////////////////////////////////////// -- GitLab