-
Notifications
You must be signed in to change notification settings - Fork 0
/
events.go
118 lines (90 loc) · 3.21 KB
/
events.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package mmpd
import "sync"
type Connected func(client *ReconnectingClient)
type Disconnected func(client *ReconnectingClient)
type SubsystemsChanged func(client *ReconnectingClient, subsystems []Subsystem)
type StatusChanged func(client *ReconnectingClient, status *Status)
type PlaylistChanged func(client *ReconnectingClient, playlist *Playlist)
type CurrentSongChanged func(client *ReconnectingClient, currentSong *CurrentSong)
// Code below generated by events-gen; DO NOT EDIT.
// ListenerSet provides synchronized access to a set of listeners
type ListenerSet[T comparable] struct {
lock sync.RWMutex
set map[T]struct{}
}
func NewListenerSet[T comparable]() *ListenerSet[T] {
return &ListenerSet[T]{
set: make(map[T]struct{}),
}
}
func (l *ListenerSet[T]) Add(e T) {
l.lock.Lock()
l.set[e] = struct{}{}
l.lock.Unlock()
}
func (l *ListenerSet[T]) Remove(e T) {
l.lock.Lock()
delete(l.set, e)
l.lock.Unlock()
}
func (l *ListenerSet[T]) Notify(notifyFn func(l T)) {
l.lock.RLock()
defer l.lock.RUnlock()
for v := range l.set {
notifyFn(v)
}
}
type ConnectedListener struct {
fn func(client *ReconnectingClient)
}
func (l *ConnectedListener) Connected(client *ReconnectingClient) {
l.fn(client)
}
func NewConnectedListener(fn func(client *ReconnectingClient)) *ConnectedListener {
return &ConnectedListener{fn: fn}
}
type DisconnectedListener struct {
fn func(client *ReconnectingClient)
}
func (l *DisconnectedListener) Disconnected(client *ReconnectingClient) {
l.fn(client)
}
func NewDisconnectedListener(fn func(client *ReconnectingClient)) *DisconnectedListener {
return &DisconnectedListener{fn: fn}
}
type SubsystemsChangedListener struct {
fn func(client *ReconnectingClient, subsystems []Subsystem)
}
func (l *SubsystemsChangedListener) SubsystemsChanged(client *ReconnectingClient, subsystems []Subsystem) {
l.fn(client, subsystems)
}
func NewSubsystemsChangedListener(fn func(client *ReconnectingClient, subsystems []Subsystem)) *SubsystemsChangedListener {
return &SubsystemsChangedListener{fn: fn}
}
type StatusChangedListener struct {
fn func(client *ReconnectingClient, status *Status)
}
func (l *StatusChangedListener) StatusChanged(client *ReconnectingClient, status *Status) {
l.fn(client, status)
}
func NewStatusChangedListener(fn func(client *ReconnectingClient, status *Status)) *StatusChangedListener {
return &StatusChangedListener{fn: fn}
}
type PlaylistChangedListener struct {
fn func(client *ReconnectingClient, playlist *Playlist)
}
func (l *PlaylistChangedListener) PlaylistChanged(client *ReconnectingClient, playlist *Playlist) {
l.fn(client, playlist)
}
func NewPlaylistChangedListener(fn func(client *ReconnectingClient, playlist *Playlist)) *PlaylistChangedListener {
return &PlaylistChangedListener{fn: fn}
}
type CurrentSongChangedListener struct {
fn func(client *ReconnectingClient, currentSong *CurrentSong)
}
func (l *CurrentSongChangedListener) CurrentSongChanged(client *ReconnectingClient, currentSong *CurrentSong) {
l.fn(client, currentSong)
}
func NewCurrentSongChangedListener(fn func(client *ReconnectingClient, currentSong *CurrentSong)) *CurrentSongChangedListener {
return &CurrentSongChangedListener{fn: fn}
}