Use PostEvent to avoid casting to concrete type (#1006)

This commit is contained in:
Raja Subramanian
2022-09-15 12:22:13 +05:30
committed by GitHub
parent 07c43e0972
commit 33f782a99b
4 changed files with 77 additions and 14 deletions
+7 -7
View File
@@ -51,7 +51,7 @@ func (p *ParticipantSupervisor) AddPublication(trackID livekit.TrackID) {
pm = NewPublicationMonitor(PublicationMonitorParams{TrackID: trackID, Logger: p.params.Logger})
p.publications[trackID] = pm
}
pm.(*PublicationMonitor).AddPending()
pm.PostEvent(types.OperationMonitorEventAddPendingPublication, nil)
p.lock.Unlock()
}
@@ -59,7 +59,7 @@ func (p *ParticipantSupervisor) SetPublicationMute(trackID livekit.TrackID, isMu
p.lock.Lock()
pm, ok := p.publications[trackID]
if ok {
pm.(*PublicationMonitor).SetMute(isMuted)
pm.PostEvent(types.OperationMonitorEventSetPublicationMute, isMuted)
}
p.lock.Unlock()
}
@@ -68,7 +68,7 @@ func (p *ParticipantSupervisor) SetPublishedTrack(trackID livekit.TrackID, pubTr
p.lock.RLock()
pm, ok := p.publications[trackID]
if ok {
pm.(*PublicationMonitor).SetPublishedTrack(pubTrack)
pm.PostEvent(types.OperationMonitorEventSetPublishedTrack, pubTrack)
}
p.lock.RUnlock()
}
@@ -77,7 +77,7 @@ func (p *ParticipantSupervisor) ClearPublishedTrack(trackID livekit.TrackID, pub
p.lock.RLock()
pm, ok := p.publications[trackID]
if ok {
pm.(*PublicationMonitor).ClearPublishedTrack(pubTrack)
pm.PostEvent(types.OperationMonitorEventClearPublishedTrack, pubTrack)
}
p.lock.RUnlock()
}
@@ -89,7 +89,7 @@ func (p *ParticipantSupervisor) UpdateSubscription(trackID livekit.TrackID, isSu
sm = NewSubscriptionMonitor(SubscriptionMonitorParams{TrackID: trackID, Logger: p.params.Logger})
p.subscriptions[trackID] = sm
}
sm.(*SubscriptionMonitor).UpdateSubscription(isSubscribed)
sm.PostEvent(types.OperationMonitorEventUpdateSubscription, isSubscribed)
p.lock.Unlock()
}
@@ -97,7 +97,7 @@ func (p *ParticipantSupervisor) SetSubscribedTrack(trackID livekit.TrackID, subT
p.lock.RLock()
sm, ok := p.subscriptions[trackID]
if ok {
sm.(*SubscriptionMonitor).SetSubscribedTrack(subTrack)
sm.PostEvent(types.OperationMonitorEventSetSubscribedTrack, subTrack)
}
p.lock.RUnlock()
}
@@ -106,7 +106,7 @@ func (p *ParticipantSupervisor) ClearSubscribedTrack(trackID livekit.TrackID, su
p.lock.RLock()
sm, ok := p.subscriptions[trackID]
if ok {
sm.(*SubscriptionMonitor).ClearSubscribedTrack(subTrack)
sm.PostEvent(types.OperationMonitorEventClearSubscribedTrack, subTrack)
}
p.lock.RUnlock()
}
+17 -4
View File
@@ -47,7 +47,20 @@ func NewPublicationMonitor(params PublicationMonitorParams) *PublicationMonitor
return p
}
func (p *PublicationMonitor) AddPending() {
func (p *PublicationMonitor) PostEvent(ome types.OperationMonitorEvent, omd types.OperationMonitorData) {
switch ome {
case types.OperationMonitorEventAddPendingPublication:
p.addPending()
case types.OperationMonitorEventSetPublicationMute:
p.setMute(omd.(bool))
case types.OperationMonitorEventSetPublishedTrack:
p.setPublishedTrack(omd.(types.LocalMediaTrack))
case types.OperationMonitorEventClearPublishedTrack:
p.clearPublishedTrack(omd.(types.LocalMediaTrack))
}
}
func (p *PublicationMonitor) addPending() {
p.lock.Lock()
p.desiredPublishes.PushBack(
&publish{
@@ -65,7 +78,7 @@ func (p *PublicationMonitor) AddPending() {
p.lock.Unlock()
}
func (p *PublicationMonitor) SetMute(isMuted bool) {
func (p *PublicationMonitor) setMute(isMuted bool) {
p.lock.Lock()
p.isMuted = isMuted
if !p.isMuted {
@@ -74,14 +87,14 @@ func (p *PublicationMonitor) SetMute(isMuted bool) {
p.lock.Unlock()
}
func (p *PublicationMonitor) SetPublishedTrack(pubTrack types.LocalMediaTrack) {
func (p *PublicationMonitor) setPublishedTrack(pubTrack types.LocalMediaTrack) {
p.lock.Lock()
p.publishedTrack = pubTrack
p.update()
p.lock.Unlock()
}
func (p *PublicationMonitor) ClearPublishedTrack(pubTrack types.LocalMediaTrack) {
func (p *PublicationMonitor) clearPublishedTrack(pubTrack types.LocalMediaTrack) {
p.lock.Lock()
if p.publishedTrack == pubTrack {
p.publishedTrack = nil
+14 -3
View File
@@ -46,7 +46,18 @@ func NewSubscriptionMonitor(params SubscriptionMonitorParams) *SubscriptionMonit
return s
}
func (s *SubscriptionMonitor) UpdateSubscription(isSubscribed bool) {
func (s *SubscriptionMonitor) PostEvent(ome types.OperationMonitorEvent, omd types.OperationMonitorData) {
switch ome {
case types.OperationMonitorEventUpdateSubscription:
s.updateSubscription(omd.(bool))
case types.OperationMonitorEventSetSubscribedTrack:
s.setSubscribedTrack(omd.(types.SubscribedTrack))
case types.OperationMonitorEventClearSubscribedTrack:
s.clearSubscribedTrack(omd.(types.SubscribedTrack))
}
}
func (s *SubscriptionMonitor) updateSubscription(isSubscribed bool) {
s.lock.Lock()
s.desiredTransitions.PushBack(
&transition{
@@ -58,14 +69,14 @@ func (s *SubscriptionMonitor) UpdateSubscription(isSubscribed bool) {
s.lock.Unlock()
}
func (s *SubscriptionMonitor) SetSubscribedTrack(subTrack types.SubscribedTrack) {
func (s *SubscriptionMonitor) setSubscribedTrack(subTrack types.SubscribedTrack) {
s.lock.Lock()
s.subscribedTrack = subTrack
s.update()
s.lock.Unlock()
}
func (s *SubscriptionMonitor) ClearSubscribedTrack(subTrack types.SubscribedTrack) {
func (s *SubscriptionMonitor) clearSubscribedTrack(subTrack types.SubscribedTrack) {
s.lock.Lock()
if s.subscribedTrack == subTrack {
s.subscribedTrack = nil
+39
View File
@@ -420,7 +420,46 @@ type SubscribedTrack interface {
UpdateVideoLayer()
}
//
// Supervisor/operation monitor related definitions
//
type OperationMonitorEvent int
const (
OperationMonitorEventUpdateSubscription OperationMonitorEvent = iota
OperationMonitorEventSetSubscribedTrack
OperationMonitorEventClearSubscribedTrack
OperationMonitorEventAddPendingPublication
OperationMonitorEventSetPublicationMute
OperationMonitorEventSetPublishedTrack
OperationMonitorEventClearPublishedTrack
)
func (o OperationMonitorEvent) String() string {
switch o {
case OperationMonitorEventUpdateSubscription:
return "UPDATE_SUBSCRIPTION"
case OperationMonitorEventSetSubscribedTrack:
return "SET_SUBSCRIBED_TRACK"
case OperationMonitorEventClearSubscribedTrack:
return "CLEAR_SUBSCRIBED_TRACK"
case OperationMonitorEventAddPendingPublication:
return "ADD_PENDING_PUBLICATION"
case OperationMonitorEventSetPublicationMute:
return "SET_PUBLICATION_MUTE"
case OperationMonitorEventSetPublishedTrack:
return "SET_PUBLISHED_TRACK"
case OperationMonitorEventClearPublishedTrack:
return "CLEAR_PUBLISHED_TRACK"
default:
return fmt.Sprintf("%d", int(o))
}
}
type OperationMonitorData interface{}
type OperationMonitor interface {
PostEvent(ome OperationMonitorEvent, omd OperationMonitorData)
Check() error
IsIdle() bool
}