Skip to content

Commit 82362d5

Browse files
committed
Refactor MatrixRTCSession to use myMembershipManager
1 parent cacc373 commit 82362d5

1 file changed

Lines changed: 16 additions & 45 deletions

File tree

src/matrixrtc/MatrixRTCSession.ts

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,16 @@ import { EventTimeline } from "../models/event-timeline.ts";
2020
import { Room } from "../models/room.ts";
2121
import { MatrixClient } from "../client.ts";
2222
import { EventType } from "../@types/event.ts";
23-
import { UpdateDelayedEventAction } from "../@types/requests.ts";
24-
import { CallMembership, DEFAULT_EXPIRE_DURATION, SessionMembershipData } from "./CallMembership.ts";
23+
import { CallMembership } from "./CallMembership.ts";
2524
import { RoomStateEvent } from "../models/room-state.ts";
2625
import { Focus } from "./focus.ts";
2726
import { secureRandomBase64Url } from "../randomstring.ts";
2827
import { EncryptionKeysEventContent } from "./types.ts";
2928
import { decodeBase64, encodeUnpaddedBase64 } from "../base64.ts";
3029
import { KnownMembership } from "../@types/membership.ts";
31-
import { HTTPError, MatrixError, safeGetRetryAfterMs } from "../http-api/errors.ts";
30+
import { MatrixError, safeGetRetryAfterMs } from "../http-api/errors.ts";
3231
import { MatrixEvent } from "../models/event.ts";
33-
import { isLivekitFocusActive } from "./LivekitFocus.ts";
34-
import { sleep } from "../utils.ts";
32+
import { MyMembershipManager } from "./MatrixRTCMyMembershipManager.ts";
3533

3634
const logger = rootLogger.getChild("MatrixRTCSession");
3735

@@ -294,22 +292,19 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
294292
* This is determined by checking if the relativeExpiry has been set.
295293
*/
296294
public isJoined(): boolean {
297-
return this.relativeExpiry !== undefined;
295+
return this.myMembershipManager?.isJoined() ?? false;
298296
}
299297

300298
/**
301299
* Performs cleanup & removes timers for client shutdown
302300
*/
303301
public async stop(): Promise<void> {
304-
await this.leaveRoomSession(1000);
302+
await this.myMembershipManager?.leaveRoomSession(1000);
305303
if (this.expiryTimeout) {
306304
clearTimeout(this.expiryTimeout);
307305
this.expiryTimeout = undefined;
308306
}
309-
if (this.memberEventTimeout) {
310-
clearTimeout(this.memberEventTimeout);
311-
this.memberEventTimeout = undefined;
312-
}
307+
this.myMembershipManager?.stop();
313308
const roomState = this.room.getLiveTimeline().getState(EventTimeline.FORWARDS);
314309
roomState?.off(RoomStateEvent.Members, this.onMembershipUpdate);
315310
}
@@ -332,22 +327,19 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
332327
if (this.isJoined()) {
333328
logger.info(`Already joined to session in room ${this.room.roomId}: ignoring join call`);
334329
return;
330+
} else {
331+
this.myMembershipManager = new MyMembershipManager(joinConfig, this.room, this.client, () =>
332+
this.getOldestMembership(),
333+
);
335334
}
336-
337-
this.ownFocusActive = fociActive;
338-
this.ownFociPreferred = fociPreferred;
339335
this.joinConfig = joinConfig;
340-
this.relativeExpiry = this.membershipExpiryTimeout;
341336
this.manageMediaKeys = joinConfig?.manageMediaKeys ?? this.manageMediaKeys;
342-
343-
logger.info(`Joining call session in room ${this.room.roomId} with manageMediaKeys=${this.manageMediaKeys}`);
337+
this.myMembershipManager.setJoined(fociPreferred, fociActive);
344338
if (joinConfig?.manageMediaKeys) {
345339
this.makeNewSenderKey();
346340
this.requestSendCurrentKey();
347341
}
348-
// We don't wait for this, mostly because it may fail and schedule a retry, so this
349-
// function returning doesn't really mean anything at all.
350-
this.triggerCallMembershipEventUpdate();
342+
this.myMembershipManager.joinRoomSession();
351343
this.emit(MatrixRTCSessionEvent.JoinStateChanged, true);
352344
}
353345

@@ -389,35 +381,14 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
389381

390382
logger.info(`Leaving call session in room ${this.room.roomId}`);
391383
this.joinConfig = undefined;
392-
this.relativeExpiry = undefined;
393-
this.ownFocusActive = undefined;
384+
this.myMembershipManager!.setLeft();
394385
this.manageMediaKeys = false;
395386
this.emit(MatrixRTCSessionEvent.JoinStateChanged, false);
396-
397-
if (timeout) {
398-
// The sleep promise returns the string 'timeout' and the membership update void
399-
// A success implies that the membership update was quicker then the timeout.
400-
const raceResult = await Promise.race([this.triggerCallMembershipEventUpdate(), sleep(timeout, "timeout")]);
401-
return raceResult !== "timeout";
402-
} else {
403-
await this.triggerCallMembershipEventUpdate();
404-
return true;
405-
}
387+
return await this.myMembershipManager!.leaveRoomSession(timeout);
406388
}
407389

408390
public getActiveFocus(): Focus | undefined {
409-
if (this.ownFocusActive && isLivekitFocusActive(this.ownFocusActive)) {
410-
// A livekit active focus
411-
if (this.ownFocusActive.focus_selection === "oldest_membership") {
412-
const oldestMembership = this.getOldestMembership();
413-
return oldestMembership?.getPreferredFoci()[0];
414-
}
415-
} else {
416-
// We do not understand the membership format (could be legacy). We default to oldestMembership
417-
// Once there are other methods this is a hard error!
418-
const oldestMembership = this.getOldestMembership();
419-
return oldestMembership?.getPreferredFoci()[0];
420-
}
391+
return this.myMembershipManager?.getActiveFocus();
421392
}
422393

423394
/**
@@ -794,7 +765,7 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
794765
if (this.isJoined() && !this.memberships.some(this.isMyMembership)) {
795766
logger.warn("Missing own membership: force re-join");
796767
// TODO: Should this be awaited? And is there anything to tell the focus?
797-
this.triggerCallMembershipEventUpdate();
768+
this.myMembershipManager?.triggerCallMembershipEventUpdate();
798769
}
799770
}
800771

0 commit comments

Comments
 (0)