...
1 package datastore
2
3 import (
4 "sync"
5
6 "github.com/launchdarkly/go-server-sdk/v6/interfaces"
7 "github.com/launchdarkly/go-server-sdk/v6/internal"
8 )
9
10
11
12
13 type DataStoreUpdateSinkImpl struct {
14 lastStatus interfaces.DataStoreStatus
15 broadcaster *internal.Broadcaster[interfaces.DataStoreStatus]
16 lock sync.Mutex
17 }
18
19
20 func NewDataStoreUpdateSinkImpl(
21 broadcaster *internal.Broadcaster[interfaces.DataStoreStatus],
22 ) *DataStoreUpdateSinkImpl {
23 return &DataStoreUpdateSinkImpl{
24 lastStatus: interfaces.DataStoreStatus{Available: true},
25 broadcaster: broadcaster,
26 }
27 }
28
29 func (d *DataStoreUpdateSinkImpl) getStatus() interfaces.DataStoreStatus {
30 d.lock.Lock()
31 defer d.lock.Unlock()
32 return d.lastStatus
33 }
34
35 func (d *DataStoreUpdateSinkImpl) getBroadcaster() *internal.Broadcaster[interfaces.DataStoreStatus] {
36 return d.broadcaster
37 }
38
39
40 func (d *DataStoreUpdateSinkImpl) UpdateStatus(newStatus interfaces.DataStoreStatus) {
41 d.lock.Lock()
42 modified := false
43 if newStatus != d.lastStatus {
44 d.lastStatus = newStatus
45 modified = true
46 }
47 d.lock.Unlock()
48 if modified {
49 d.broadcaster.Broadcast(newStatus)
50 }
51 }
52
View as plain text