@@ -21,6 +21,7 @@ import ServerSocket, {
21
21
ChatMessage as SignalChatMessage ,
22
22
ClientLeftEvent ,
23
23
ClientMetadataReceivedEvent ,
24
+ CloudRecordingStartedEvent ,
24
25
KnockerLeftEvent ,
25
26
KnockAcceptedEvent ,
26
27
KnockRejectedEvent ,
@@ -58,7 +59,8 @@ export type ConnectionStatus =
58
59
| "knock_rejected" ;
59
60
60
61
export type CloudRecordingState = {
61
- status : "recording" | "requested" ;
62
+ error ?: string ;
63
+ status : "recording" | "requested" | "error" ;
62
64
startedAt ?: number ;
63
65
} ;
64
66
@@ -140,6 +142,7 @@ export interface RoomEventsMap {
140
142
chat_message : ( e : CustomEvent < ChatMessage > ) => void ;
141
143
cloud_recording_request_started : ( e : CustomEvent < CloudRecordingState > ) => void ;
142
144
cloud_recording_started : ( e : CustomEvent < CloudRecordingState > ) => void ;
145
+ cloud_recording_started_error : ( e : CustomEvent < CloudRecordingState > ) => void ;
143
146
cloud_recording_stopped : ( e : CustomEvent < CloudRecordingState > ) => void ;
144
147
local_camera_enabled : ( e : CustomEvent < LocalCameraEnabledEvent > ) => void ;
145
148
local_microphone_enabled : ( e : CustomEvent < LocalMicrophoneEnabledEvent > ) => void ;
@@ -352,6 +355,7 @@ export default class RoomConnection extends TypedEventTarget {
352
355
this . signalSocket . on ( "knocker_left" , this . _handleKnockerLeft . bind ( this ) ) ;
353
356
this . signalSocket . on ( "room_joined" , this . _handleRoomJoined . bind ( this ) ) ;
354
357
this . signalSocket . on ( "room_knocked" , this . _handleRoomKnocked . bind ( this ) ) ;
358
+ this . signalSocket . on ( "cloud_recording_started" , this . _handleCloudRecordingStarted . bind ( this ) ) ;
355
359
this . signalSocket . on ( "cloud_recording_stopped" , this . _handleCloudRecordingStopped . bind ( this ) ) ;
356
360
this . signalSocket . on ( "screenshare_started" , this . _handleScreenshareStarted . bind ( this ) ) ;
357
361
this . signalSocket . on ( "screenshare_stopped" , this . _handleScreenshareStopped . bind ( this ) ) ;
@@ -409,7 +413,19 @@ export default class RoomConnection extends TypedEventTarget {
409
413
this . dispatchEvent ( new RoomConnectionEvent ( "chat_message" , { detail : message } ) ) ;
410
414
}
411
415
412
- private _handleCloudRecordingStarted ( { client } : { client : SignalClient } ) {
416
+ private _handleCloudRecordingStarted ( event : CloudRecordingStartedEvent ) {
417
+ // Only handle the start failure event here. The recording is
418
+ // considered started when the recorder client joins.
419
+ if ( event . error ) {
420
+ this . dispatchEvent (
421
+ new RoomConnectionEvent ( "cloud_recording_started_error" , {
422
+ detail : { error : event . error , status : "error" } ,
423
+ } )
424
+ ) ;
425
+ }
426
+ }
427
+
428
+ private _handleRecorderClientJoined ( { client } : { client : SignalClient } ) {
413
429
this . dispatchEvent (
414
430
new RoomConnectionEvent ( "cloud_recording_started" , {
415
431
detail : {
@@ -439,7 +455,7 @@ export default class RoomConnection extends TypedEventTarget {
439
455
440
456
private _handleNewClient ( { client } : NewClientEvent ) {
441
457
if ( client . role . roleName === "recorder" ) {
442
- this . _handleCloudRecordingStarted ( { client } ) ;
458
+ this . _handleRecorderClientJoined ( { client } ) ;
443
459
}
444
460
if ( client . role . roleName === "streamer" ) {
445
461
this . _handleStreamingStarted ( ) ;
@@ -569,7 +585,7 @@ export default class RoomConnection extends TypedEventTarget {
569
585
570
586
const recorderClient = clients . find ( ( c ) => c . role . roleName === "recorder" ) ;
571
587
if ( recorderClient ) {
572
- this . _handleCloudRecordingStarted ( { client : recorderClient } ) ;
588
+ this . _handleRecorderClientJoined ( { client : recorderClient } ) ;
573
589
}
574
590
575
591
const streamerClient = clients . find ( ( c ) => c . role . roleName === "streamer" ) ;
0 commit comments