add helpers for partiicpant reconnect and version (#3034)

This commit is contained in:
Paul Wells
2024-09-22 23:37:35 -07:00
committed by GitHub
parent 5e3b3ee3c1
commit d26ade0076
5 changed files with 166 additions and 86 deletions
+18 -5
View File
@@ -134,6 +134,7 @@ type ParticipantParams struct {
ClientInfo ClientInfo
Region string
Migration bool
Reconnect bool
AdaptiveStream bool
AllowTCPFallback bool
TCPFallbackRTTThreshold int
@@ -620,11 +621,7 @@ func (p *ParticipantImpl) CanSkipBroadcast() bool {
return !p.requireBroadcast
}
func (p *ParticipantImpl) VersionNumber() uint32 {
return p.version.Load()
}
func (p *ParticipantImpl) ToProtoWithVersion() (*livekit.ParticipantInfo, utils.TimedVersion) {
func (p *ParticipantImpl) maybeIncVersion() {
if p.dirty.Load() {
p.lock.Lock()
if p.dirty.Swap(false) {
@@ -633,6 +630,18 @@ func (p *ParticipantImpl) ToProtoWithVersion() (*livekit.ParticipantInfo, utils.
}
p.lock.Unlock()
}
}
func (p *ParticipantImpl) Version() utils.TimedVersion {
p.maybeIncVersion()
p.lock.RLock()
defer p.lock.RUnlock()
return p.timedVersion
}
func (p *ParticipantImpl) ToProtoWithVersion() (*livekit.ParticipantInfo, utils.TimedVersion) {
p.maybeIncVersion()
p.lock.RLock()
grants := p.grants.Load()
@@ -935,6 +944,10 @@ func (p *ParticipantImpl) SetMigrateInfo(
p.TransportManager.SetMigrateInfo(previousOffer, previousAnswer, dataChannels)
}
func (p *ParticipantImpl) IsReconnect() bool {
return p.params.Reconnect
}
func (p *ParticipantImpl) Close(sendLeave bool, reason types.ParticipantCloseReason, isExpectedToResume bool) error {
if p.isClosed.Swap(true) {
// already closed
+2 -1
View File
@@ -261,7 +261,7 @@ type Participant interface {
IsAgent() bool
CanSkipBroadcast() bool
VersionNumber() uint32
Version() utils.TimedVersion
ToProto() *livekit.ParticipantInfo
IsPublisher() bool
@@ -424,6 +424,7 @@ type LocalParticipant interface {
mediaTracks []*livekit.TrackPublishedResponse,
dataChannels []*livekit.DataChannelInfo,
)
IsReconnect() bool
UpdateMediaRTT(rtt uint32)
UpdateSignalingRTT(rtt uint32)
@@ -579,6 +579,16 @@ type FakeLocalParticipant struct {
isReadyReturnsOnCall map[int]struct {
result1 bool
}
IsReconnectStub func() bool
isReconnectMutex sync.RWMutex
isReconnectArgsForCall []struct {
}
isReconnectReturns struct {
result1 bool
}
isReconnectReturnsOnCall map[int]struct {
result1 bool
}
IsRecorderStub func() bool
isRecorderMutex sync.RWMutex
isRecorderArgsForCall []struct {
@@ -1094,15 +1104,15 @@ type FakeLocalParticipant struct {
arg1 livekit.ParticipantID
arg2 uint32
}
VersionNumberStub func() uint32
versionNumberMutex sync.RWMutex
versionNumberArgsForCall []struct {
VersionStub func() utils.TimedVersion
versionMutex sync.RWMutex
versionArgsForCall []struct {
}
versionNumberReturns struct {
result1 uint32
versionReturns struct {
result1 utils.TimedVersion
}
versionNumberReturnsOnCall map[int]struct {
result1 uint32
versionReturnsOnCall map[int]struct {
result1 utils.TimedVersion
}
WaitUntilSubscribedStub func(time.Duration) error
waitUntilSubscribedMutex sync.RWMutex
@@ -4073,6 +4083,59 @@ func (fake *FakeLocalParticipant) IsReadyReturnsOnCall(i int, result1 bool) {
}{result1}
}
func (fake *FakeLocalParticipant) IsReconnect() bool {
fake.isReconnectMutex.Lock()
ret, specificReturn := fake.isReconnectReturnsOnCall[len(fake.isReconnectArgsForCall)]
fake.isReconnectArgsForCall = append(fake.isReconnectArgsForCall, struct {
}{})
stub := fake.IsReconnectStub
fakeReturns := fake.isReconnectReturns
fake.recordInvocation("IsReconnect", []interface{}{})
fake.isReconnectMutex.Unlock()
if stub != nil {
return stub()
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *FakeLocalParticipant) IsReconnectCallCount() int {
fake.isReconnectMutex.RLock()
defer fake.isReconnectMutex.RUnlock()
return len(fake.isReconnectArgsForCall)
}
func (fake *FakeLocalParticipant) IsReconnectCalls(stub func() bool) {
fake.isReconnectMutex.Lock()
defer fake.isReconnectMutex.Unlock()
fake.IsReconnectStub = stub
}
func (fake *FakeLocalParticipant) IsReconnectReturns(result1 bool) {
fake.isReconnectMutex.Lock()
defer fake.isReconnectMutex.Unlock()
fake.IsReconnectStub = nil
fake.isReconnectReturns = struct {
result1 bool
}{result1}
}
func (fake *FakeLocalParticipant) IsReconnectReturnsOnCall(i int, result1 bool) {
fake.isReconnectMutex.Lock()
defer fake.isReconnectMutex.Unlock()
fake.IsReconnectStub = nil
if fake.isReconnectReturnsOnCall == nil {
fake.isReconnectReturnsOnCall = make(map[int]struct {
result1 bool
})
}
fake.isReconnectReturnsOnCall[i] = struct {
result1 bool
}{result1}
}
func (fake *FakeLocalParticipant) IsRecorder() bool {
fake.isRecorderMutex.Lock()
ret, specificReturn := fake.isRecorderReturnsOnCall[len(fake.isRecorderArgsForCall)]
@@ -6967,15 +7030,15 @@ func (fake *FakeLocalParticipant) VerifySubscribeParticipantInfoArgsForCall(i in
return argsForCall.arg1, argsForCall.arg2
}
func (fake *FakeLocalParticipant) VersionNumber() uint32 {
fake.versionNumberMutex.Lock()
ret, specificReturn := fake.versionNumberReturnsOnCall[len(fake.versionNumberArgsForCall)]
fake.versionNumberArgsForCall = append(fake.versionNumberArgsForCall, struct {
func (fake *FakeLocalParticipant) Version() utils.TimedVersion {
fake.versionMutex.Lock()
ret, specificReturn := fake.versionReturnsOnCall[len(fake.versionArgsForCall)]
fake.versionArgsForCall = append(fake.versionArgsForCall, struct {
}{})
stub := fake.VersionNumberStub
fakeReturns := fake.versionNumberReturns
fake.recordInvocation("VersionNumber", []interface{}{})
fake.versionNumberMutex.Unlock()
stub := fake.VersionStub
fakeReturns := fake.versionReturns
fake.recordInvocation("Version", []interface{}{})
fake.versionMutex.Unlock()
if stub != nil {
return stub()
}
@@ -6985,38 +7048,38 @@ func (fake *FakeLocalParticipant) VersionNumber() uint32 {
return fakeReturns.result1
}
func (fake *FakeLocalParticipant) VersionNumberCallCount() int {
fake.versionNumberMutex.RLock()
defer fake.versionNumberMutex.RUnlock()
return len(fake.versionNumberArgsForCall)
func (fake *FakeLocalParticipant) VersionCallCount() int {
fake.versionMutex.RLock()
defer fake.versionMutex.RUnlock()
return len(fake.versionArgsForCall)
}
func (fake *FakeLocalParticipant) VersionNumberCalls(stub func() uint32) {
fake.versionNumberMutex.Lock()
defer fake.versionNumberMutex.Unlock()
fake.VersionNumberStub = stub
func (fake *FakeLocalParticipant) VersionCalls(stub func() utils.TimedVersion) {
fake.versionMutex.Lock()
defer fake.versionMutex.Unlock()
fake.VersionStub = stub
}
func (fake *FakeLocalParticipant) VersionNumberReturns(result1 uint32) {
fake.versionNumberMutex.Lock()
defer fake.versionNumberMutex.Unlock()
fake.VersionNumberStub = nil
fake.versionNumberReturns = struct {
result1 uint32
func (fake *FakeLocalParticipant) VersionReturns(result1 utils.TimedVersion) {
fake.versionMutex.Lock()
defer fake.versionMutex.Unlock()
fake.VersionStub = nil
fake.versionReturns = struct {
result1 utils.TimedVersion
}{result1}
}
func (fake *FakeLocalParticipant) VersionNumberReturnsOnCall(i int, result1 uint32) {
fake.versionNumberMutex.Lock()
defer fake.versionNumberMutex.Unlock()
fake.VersionNumberStub = nil
if fake.versionNumberReturnsOnCall == nil {
fake.versionNumberReturnsOnCall = make(map[int]struct {
result1 uint32
func (fake *FakeLocalParticipant) VersionReturnsOnCall(i int, result1 utils.TimedVersion) {
fake.versionMutex.Lock()
defer fake.versionMutex.Unlock()
fake.VersionStub = nil
if fake.versionReturnsOnCall == nil {
fake.versionReturnsOnCall = make(map[int]struct {
result1 utils.TimedVersion
})
}
fake.versionNumberReturnsOnCall[i] = struct {
result1 uint32
fake.versionReturnsOnCall[i] = struct {
result1 utils.TimedVersion
}{result1}
}
@@ -7264,6 +7327,8 @@ func (fake *FakeLocalParticipant) Invocations() map[string][][]interface{} {
defer fake.isPublisherMutex.RUnlock()
fake.isReadyMutex.RLock()
defer fake.isReadyMutex.RUnlock()
fake.isReconnectMutex.RLock()
defer fake.isReconnectMutex.RUnlock()
fake.isRecorderMutex.RLock()
defer fake.isRecorderMutex.RUnlock()
fake.isSubscribedToMutex.RLock()
@@ -7394,8 +7459,8 @@ func (fake *FakeLocalParticipant) Invocations() map[string][][]interface{} {
defer fake.updateVideoTrackMutex.RUnlock()
fake.verifySubscribeParticipantInfoMutex.RLock()
defer fake.verifySubscribeParticipantInfoMutex.RUnlock()
fake.versionNumberMutex.RLock()
defer fake.versionNumberMutex.RUnlock()
fake.versionMutex.RLock()
defer fake.versionMutex.RUnlock()
fake.waitUntilSubscribedMutex.RLock()
defer fake.waitUntilSubscribedMutex.RUnlock()
fake.writeSubscriberRTCPMutex.RLock()
+40 -40
View File
@@ -230,15 +230,15 @@ type FakeParticipant struct {
updateSubscriptionPermissionReturnsOnCall map[int]struct {
result1 error
}
VersionNumberStub func() uint32
versionNumberMutex sync.RWMutex
versionNumberArgsForCall []struct {
VersionStub func() utils.TimedVersion
versionMutex sync.RWMutex
versionArgsForCall []struct {
}
versionNumberReturns struct {
result1 uint32
versionReturns struct {
result1 utils.TimedVersion
}
versionNumberReturnsOnCall map[int]struct {
result1 uint32
versionReturnsOnCall map[int]struct {
result1 utils.TimedVersion
}
invocations map[string][][]interface{}
invocationsMutex sync.RWMutex
@@ -1381,15 +1381,15 @@ func (fake *FakeParticipant) UpdateSubscriptionPermissionReturnsOnCall(i int, re
}{result1}
}
func (fake *FakeParticipant) VersionNumber() uint32 {
fake.versionNumberMutex.Lock()
ret, specificReturn := fake.versionNumberReturnsOnCall[len(fake.versionNumberArgsForCall)]
fake.versionNumberArgsForCall = append(fake.versionNumberArgsForCall, struct {
func (fake *FakeParticipant) Version() utils.TimedVersion {
fake.versionMutex.Lock()
ret, specificReturn := fake.versionReturnsOnCall[len(fake.versionArgsForCall)]
fake.versionArgsForCall = append(fake.versionArgsForCall, struct {
}{})
stub := fake.VersionNumberStub
fakeReturns := fake.versionNumberReturns
fake.recordInvocation("VersionNumber", []interface{}{})
fake.versionNumberMutex.Unlock()
stub := fake.VersionStub
fakeReturns := fake.versionReturns
fake.recordInvocation("Version", []interface{}{})
fake.versionMutex.Unlock()
if stub != nil {
return stub()
}
@@ -1399,38 +1399,38 @@ func (fake *FakeParticipant) VersionNumber() uint32 {
return fakeReturns.result1
}
func (fake *FakeParticipant) VersionNumberCallCount() int {
fake.versionNumberMutex.RLock()
defer fake.versionNumberMutex.RUnlock()
return len(fake.versionNumberArgsForCall)
func (fake *FakeParticipant) VersionCallCount() int {
fake.versionMutex.RLock()
defer fake.versionMutex.RUnlock()
return len(fake.versionArgsForCall)
}
func (fake *FakeParticipant) VersionNumberCalls(stub func() uint32) {
fake.versionNumberMutex.Lock()
defer fake.versionNumberMutex.Unlock()
fake.VersionNumberStub = stub
func (fake *FakeParticipant) VersionCalls(stub func() utils.TimedVersion) {
fake.versionMutex.Lock()
defer fake.versionMutex.Unlock()
fake.VersionStub = stub
}
func (fake *FakeParticipant) VersionNumberReturns(result1 uint32) {
fake.versionNumberMutex.Lock()
defer fake.versionNumberMutex.Unlock()
fake.VersionNumberStub = nil
fake.versionNumberReturns = struct {
result1 uint32
func (fake *FakeParticipant) VersionReturns(result1 utils.TimedVersion) {
fake.versionMutex.Lock()
defer fake.versionMutex.Unlock()
fake.VersionStub = nil
fake.versionReturns = struct {
result1 utils.TimedVersion
}{result1}
}
func (fake *FakeParticipant) VersionNumberReturnsOnCall(i int, result1 uint32) {
fake.versionNumberMutex.Lock()
defer fake.versionNumberMutex.Unlock()
fake.VersionNumberStub = nil
if fake.versionNumberReturnsOnCall == nil {
fake.versionNumberReturnsOnCall = make(map[int]struct {
result1 uint32
func (fake *FakeParticipant) VersionReturnsOnCall(i int, result1 utils.TimedVersion) {
fake.versionMutex.Lock()
defer fake.versionMutex.Unlock()
fake.VersionStub = nil
if fake.versionReturnsOnCall == nil {
fake.versionReturnsOnCall = make(map[int]struct {
result1 utils.TimedVersion
})
}
fake.versionNumberReturnsOnCall[i] = struct {
result1 uint32
fake.versionReturnsOnCall[i] = struct {
result1 utils.TimedVersion
}{result1}
}
@@ -1479,8 +1479,8 @@ func (fake *FakeParticipant) Invocations() map[string][][]interface{} {
defer fake.toProtoMutex.RUnlock()
fake.updateSubscriptionPermissionMutex.RLock()
defer fake.updateSubscriptionPermissionMutex.RUnlock()
fake.versionNumberMutex.RLock()
defer fake.versionNumberMutex.RUnlock()
fake.versionMutex.RLock()
defer fake.versionMutex.RUnlock()
copiedInvocations := map[string][][]interface{}{}
for key, value := range fake.invocations {
copiedInvocations[key] = value
+1
View File
@@ -466,6 +466,7 @@ func (r *RoomManager) StartSession(
PublishEnabledCodecs: protoRoom.EnabledCodecs,
SubscribeEnabledCodecs: protoRoom.EnabledCodecs,
Grants: pi.Grants,
Reconnect: pi.Reconnect,
Logger: pLogger,
ClientConf: clientConf,
ClientInfo: rtc.ClientInfo{ClientInfo: pi.Client},