mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-30 00:12:50 -05:00
core: refactor to use a generic-compatible syncmap
This commit is contained in:
@@ -148,8 +148,7 @@ func (m *Manager) notifier() {
|
||||
continue
|
||||
}
|
||||
|
||||
m.subscribers.Range(func(key, value interface{}) bool {
|
||||
ch := value.(chan CUPSState)
|
||||
m.subscribers.Range(func(key string, ch chan CUPSState) bool {
|
||||
select {
|
||||
case ch <- currentState:
|
||||
default:
|
||||
@@ -193,7 +192,7 @@ func (m *Manager) Subscribe(id string) chan CUPSState {
|
||||
ch := make(chan CUPSState, 64)
|
||||
|
||||
wasEmpty := true
|
||||
m.subscribers.Range(func(key, value interface{}) bool {
|
||||
m.subscribers.Range(func(key string, ch chan CUPSState) bool {
|
||||
wasEmpty = false
|
||||
return false
|
||||
})
|
||||
@@ -214,11 +213,11 @@ func (m *Manager) Subscribe(id string) chan CUPSState {
|
||||
|
||||
func (m *Manager) Unsubscribe(id string) {
|
||||
if val, ok := m.subscribers.LoadAndDelete(id); ok {
|
||||
close(val.(chan CUPSState))
|
||||
close(val)
|
||||
}
|
||||
|
||||
isEmpty := true
|
||||
m.subscribers.Range(func(key, value interface{}) bool {
|
||||
m.subscribers.Range(func(key string, ch chan CUPSState) bool {
|
||||
isEmpty = false
|
||||
return false
|
||||
})
|
||||
@@ -239,8 +238,7 @@ func (m *Manager) Close() {
|
||||
m.eventWG.Wait()
|
||||
m.notifierWg.Wait()
|
||||
|
||||
m.subscribers.Range(func(key, value interface{}) bool {
|
||||
ch := value.(chan CUPSState)
|
||||
m.subscribers.Range(func(key string, ch chan CUPSState) bool {
|
||||
close(ch)
|
||||
m.subscribers.Delete(key)
|
||||
return true
|
||||
|
||||
@@ -60,7 +60,7 @@ func TestManager_Subscribe(t *testing.T) {
|
||||
assert.NotNil(t, ch)
|
||||
|
||||
count := 0
|
||||
m.subscribers.Range(func(key, value interface{}) bool {
|
||||
m.subscribers.Range(func(key string, ch chan CUPSState) bool {
|
||||
count++
|
||||
return true
|
||||
})
|
||||
@@ -68,7 +68,7 @@ func TestManager_Subscribe(t *testing.T) {
|
||||
|
||||
m.Unsubscribe("test-client")
|
||||
count = 0
|
||||
m.subscribers.Range(func(key, value interface{}) bool {
|
||||
m.subscribers.Range(func(key string, ch chan CUPSState) bool {
|
||||
count++
|
||||
return true
|
||||
})
|
||||
@@ -101,7 +101,7 @@ func TestManager_Close(t *testing.T) {
|
||||
|
||||
m.Close()
|
||||
count := 0
|
||||
m.subscribers.Range(func(key, value interface{}) bool {
|
||||
m.subscribers.Range(func(key string, ch chan CUPSState) bool {
|
||||
count++
|
||||
return true
|
||||
})
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/AvengeMedia/DankMaterialShell/core/pkg/ipp"
|
||||
"github.com/AvengeMedia/DankMaterialShell/core/pkg/syncmap"
|
||||
)
|
||||
|
||||
type CUPSState struct {
|
||||
@@ -39,7 +40,7 @@ type Manager struct {
|
||||
client CUPSClientInterface
|
||||
subscription SubscriptionManagerInterface
|
||||
stateMutex sync.RWMutex
|
||||
subscribers sync.Map
|
||||
subscribers syncmap.Map[string, chan CUPSState]
|
||||
stopChan chan struct{}
|
||||
eventWG sync.WaitGroup
|
||||
dirty chan struct{}
|
||||
|
||||
Reference in New Issue
Block a user