forked from livekit/server-sdk-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcallback.go
133 lines (121 loc) · 4.83 KB
/
callback.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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package lksdk
import (
"github.com/livekit/protocol/livekit"
"github.com/pion/webrtc/v3"
)
type ParticipantCallback struct {
// for all participants
OnTrackMuted func(pub TrackPublication, p Participant)
OnTrackUnmuted func(pub TrackPublication, p Participant)
OnMetadataChanged func(oldMetadata string, p Participant)
OnIsSpeakingChanged func(p Participant)
OnConnectionQualityChanged func(update *livekit.ConnectionQualityInfo, p Participant)
// for remote participants
OnTrackSubscribed func(track *webrtc.TrackRemote, publication *RemoteTrackPublication, rp *RemoteParticipant)
OnTrackUnsubscribed func(track *webrtc.TrackRemote, publication *RemoteTrackPublication, rp *RemoteParticipant)
OnTrackSubscriptionFailed func(sid string, rp *RemoteParticipant)
OnTrackPublished func(publication *RemoteTrackPublication, rp *RemoteParticipant)
OnTrackUnpublished func(publication *RemoteTrackPublication, rp *RemoteParticipant)
OnDataReceived func(data []byte, rp *RemoteParticipant)
}
func NewParticipantCallback() *ParticipantCallback {
return &ParticipantCallback{
OnTrackMuted: func(pub TrackPublication, p Participant) {},
OnTrackUnmuted: func(pub TrackPublication, p Participant) {},
OnMetadataChanged: func(oldMetadata string, p Participant) {},
OnIsSpeakingChanged: func(p Participant) {},
OnConnectionQualityChanged: func(update *livekit.ConnectionQualityInfo, p Participant) {},
OnTrackSubscribed: func(track *webrtc.TrackRemote, publication *RemoteTrackPublication, rp *RemoteParticipant) {},
OnTrackUnsubscribed: func(track *webrtc.TrackRemote, publication *RemoteTrackPublication, rp *RemoteParticipant) {},
OnTrackSubscriptionFailed: func(sid string, rp *RemoteParticipant) {},
OnTrackPublished: func(publication *RemoteTrackPublication, rp *RemoteParticipant) {},
OnTrackUnpublished: func(publication *RemoteTrackPublication, rp *RemoteParticipant) {},
OnDataReceived: func(data []byte, rp *RemoteParticipant) {},
}
}
func (cb *ParticipantCallback) Merge(other *ParticipantCallback) {
if other.OnTrackMuted != nil {
cb.OnTrackMuted = other.OnTrackMuted
}
if other.OnTrackUnmuted != nil {
cb.OnTrackUnmuted = other.OnTrackUnmuted
}
if other.OnMetadataChanged != nil {
cb.OnMetadataChanged = other.OnMetadataChanged
}
if other.OnIsSpeakingChanged != nil {
cb.OnIsSpeakingChanged = other.OnIsSpeakingChanged
}
if other.OnConnectionQualityChanged != nil {
cb.OnConnectionQualityChanged = other.OnConnectionQualityChanged
}
if other.OnTrackSubscribed != nil {
cb.OnTrackSubscribed = other.OnTrackSubscribed
}
if other.OnTrackUnsubscribed != nil {
cb.OnTrackUnsubscribed = other.OnTrackUnsubscribed
}
if other.OnTrackSubscriptionFailed != nil {
cb.OnTrackSubscriptionFailed = other.OnTrackSubscriptionFailed
}
if other.OnTrackPublished != nil {
cb.OnTrackPublished = other.OnTrackPublished
}
if other.OnTrackUnpublished != nil {
cb.OnTrackUnpublished = other.OnTrackUnpublished
}
if other.OnDataReceived != nil {
cb.OnDataReceived = other.OnDataReceived
}
}
type RoomCallback struct {
OnDisconnected func()
OnParticipantConnected func(*RemoteParticipant)
OnParticipantDisconnected func(*RemoteParticipant)
OnActiveSpeakersChanged func([]Participant)
OnRoomMetadataChanged func(metadata string)
OnReconnecting func()
OnReconnected func()
// participant events are sent to the room as well
ParticipantCallback
}
func NewRoomCallback() *RoomCallback {
pc := NewParticipantCallback()
return &RoomCallback{
ParticipantCallback: *pc,
OnDisconnected: func() {},
OnParticipantConnected: func(participant *RemoteParticipant) {},
OnParticipantDisconnected: func(participant *RemoteParticipant) {},
OnActiveSpeakersChanged: func(participants []Participant) {},
OnRoomMetadataChanged: func(metadata string) {},
OnReconnecting: func() {},
OnReconnected: func() {},
}
}
func (cb *RoomCallback) Merge(other *RoomCallback) {
if other == nil {
return
}
if other.OnDisconnected != nil {
cb.OnDisconnected = other.OnDisconnected
}
if other.OnParticipantConnected != nil {
cb.OnParticipantConnected = other.OnParticipantConnected
}
if other.OnParticipantDisconnected != nil {
cb.OnParticipantDisconnected = other.OnParticipantDisconnected
}
if other.OnActiveSpeakersChanged != nil {
cb.OnActiveSpeakersChanged = other.OnActiveSpeakersChanged
}
if other.OnRoomMetadataChanged != nil {
cb.OnRoomMetadataChanged = other.OnRoomMetadataChanged
}
if other.OnReconnecting != nil {
cb.OnReconnecting = other.OnReconnecting
}
if other.OnReconnected != nil {
cb.OnReconnected = other.OnReconnected
}
cb.ParticipantCallback.Merge(&other.ParticipantCallback)
}