v0.0.632 Pubsub.PublishAsync
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m41s
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m41s
This commit is contained in:
+29
-3
@@ -2,12 +2,13 @@ package dataext
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"git.blackforestbytes.com/BlackForestBytes/goext/langext"
|
|
||||||
"git.blackforestbytes.com/BlackForestBytes/goext/syncext"
|
|
||||||
"github.com/rs/xid"
|
|
||||||
"iter"
|
"iter"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.blackforestbytes.com/BlackForestBytes/goext/langext"
|
||||||
|
"git.blackforestbytes.com/BlackForestBytes/goext/syncext"
|
||||||
|
"github.com/rs/xid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PubSub is a simple Pub/Sub Broker
|
// PubSub is a simple Pub/Sub Broker
|
||||||
@@ -162,6 +163,31 @@ func (ps *PubSub[TNamespace, TData]) PublishWithTimeout(ns TNamespace, data TDat
|
|||||||
return subscriber, actualReceiver
|
return subscriber, actualReceiver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PublishAsync sends `data` to all subscriber
|
||||||
|
// does not wait for subscriber (this method returns immediately), waits at most {timeout} seconds on channels (async)
|
||||||
|
func (ps *PubSub[TNamespace, TData]) PublishAsync(ns TNamespace, data TData, timeout time.Duration) (subscriber int) {
|
||||||
|
ps.masterLock.Lock()
|
||||||
|
subs := langext.ArrCopy(ps.subscriptions[ns])
|
||||||
|
ps.masterLock.Unlock()
|
||||||
|
|
||||||
|
subscriber = len(subs)
|
||||||
|
|
||||||
|
for _, sub := range subs {
|
||||||
|
func() {
|
||||||
|
sub.subLock.Lock()
|
||||||
|
defer sub.subLock.Unlock()
|
||||||
|
|
||||||
|
if sub.Func != nil {
|
||||||
|
go func() { sub.Func(data) }()
|
||||||
|
} else if sub.Chan != nil {
|
||||||
|
go func() { _ = syncext.WriteChannelWithTimeout(sub.Chan, data, timeout) }()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
return subscriber
|
||||||
|
}
|
||||||
|
|
||||||
func (ps *PubSub[TNamespace, TData]) SubscribeByCallback(ns TNamespace, fn func(TData)) PubSubSubscription {
|
func (ps *PubSub[TNamespace, TData]) SubscribeByCallback(ns TNamespace, fn func(TData)) PubSubSubscription {
|
||||||
ps.masterLock.Lock()
|
ps.masterLock.Lock()
|
||||||
defer ps.masterLock.Unlock()
|
defer ps.masterLock.Unlock()
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
package goext
|
package goext
|
||||||
|
|
||||||
const GoextVersion = "0.0.631"
|
const GoextVersion = "0.0.632"
|
||||||
|
|
||||||
const GoextVersionTimestamp = "2026-03-14T15:14:38+0100"
|
const GoextVersionTimestamp = "2026-04-13T16:07:00+0100"
|
||||||
|
|||||||
Reference in New Issue
Block a user