chore: Use `fireCallEvent` instead of emit.

This commit is contained in:
cloudwebrtc 2021-12-02 23:04:33 +08:00
parent 1f519703a8
commit 9bc35a216a
1 changed files with 25 additions and 36 deletions

View File

@ -301,6 +301,7 @@ class CallSession {
late User remoteUser; late User remoteUser;
late CallParty hangupParty; late CallParty hangupParty;
late String hangupReason; late String hangupReason;
late CallError lastError;
SDPStreamMetadata? remoteSDPStreamMetadata; SDPStreamMetadata? remoteSDPStreamMetadata;
List<RTCRtpSender> usermediaSenders = []; List<RTCRtpSender> usermediaSenders = [];
@ -383,7 +384,7 @@ class CallSession {
Logs().v('[VOIP] Call invite has expired. Hanging up.'); Logs().v('[VOIP] Call invite has expired. Hanging up.');
hangupParty = CallParty.kRemote; // effectively hangupParty = CallParty.kRemote; // effectively
setCallState(CallState.kEnded); setCallState(CallState.kEnded);
emit(CallEvent.kHangup); fireCallEvent(CallEvent.kHangup);
} }
ringingTimer?.cancel(); ringingTimer?.cancel();
ringingTimer = null; ringingTimer = null;
@ -447,7 +448,7 @@ class CallSession {
final newLocalOnHold = await isLocalOnHold(); final newLocalOnHold = await isLocalOnHold();
if (prevLocalOnHold != newLocalOnHold) { if (prevLocalOnHold != newLocalOnHold) {
localHold = newLocalOnHold; localHold = newLocalOnHold;
emit(CallEvent.kLocalHoldUnhold, newLocalOnHold); fireCallEvent(CallEvent.kLocalHoldUnhold);
} }
} }
@ -470,14 +471,14 @@ class CallSession {
} else { } else {
Logs().i('Not found purpose for remote stream $streamId, remove it?'); Logs().i('Not found purpose for remote stream $streamId, remove it?');
wpstream.stopped = true; wpstream.stopped = true;
emit(CallEvent.kFeedsChanged, streams); fireCallEvent(CallEvent.kFeedsChanged);
} }
}); });
} }
void onSDPStreamMetadataReceived(SDPStreamMetadata metadata) async { void onSDPStreamMetadataReceived(SDPStreamMetadata metadata) async {
_updateRemoteSDPStreamMetadata(metadata); _updateRemoteSDPStreamMetadata(metadata);
emit(CallEvent.kFeedsChanged, streams); fireCallEvent(CallEvent.kFeedsChanged);
} }
void onCandidatesReceived(List<dynamic> candidates) { void onCandidatesReceived(List<dynamic> candidates) {
@ -508,7 +509,7 @@ class CallSession {
void onAssertedIdentityReceived(AssertedIdentity identity) async { void onAssertedIdentityReceived(AssertedIdentity identity) async {
remoteAssertedIdentity = identity; remoteAssertedIdentity = identity;
emit(CallEvent.kAssertedIdentityChanged); fireCallEvent(CallEvent.kAssertedIdentityChanged);
} }
bool get screensharingEnabled => localScreenSharingStream != null; bool get screensharingEnabled => localScreenSharingStream != null;
@ -536,10 +537,9 @@ class CallSession {
_addLocalStream(stream, SDPStreamMetadataPurpose.Screenshare); _addLocalStream(stream, SDPStreamMetadataPurpose.Screenshare);
return true; return true;
} catch (err) { } catch (err) {
emit( fireCallEvent(CallEvent.kError);
CallEvent.kError, lastError = CallError(CallErrorCode.NoUserMedia,
CallError(CallErrorCode.NoUserMedia, 'Failed to get screen-sharing stream: ', err);
'Failed to get screen-sharing stream: ', err));
return false; return false;
} }
} else { } else {
@ -550,8 +550,8 @@ class CallSession {
await track.stop(); await track.stop();
} }
localScreenSharingStream!.stopped = true; localScreenSharingStream!.stopped = true;
_removeStream(localScreenSharingStream!.stream!); await _removeStream(localScreenSharingStream!.stream!);
emit(CallEvent.kFeedsChanged, streams); fireCallEvent(CallEvent.kFeedsChanged);
return false; return false;
} }
} }
@ -576,7 +576,7 @@ class CallSession {
); );
await newStream.initialize(); await newStream.initialize();
streams.add(newStream); streams.add(newStream);
emit(CallEvent.kFeedsChanged, streams); fireCallEvent(CallEvent.kFeedsChanged);
} }
if (addToPeerConnection) { if (addToPeerConnection) {
@ -591,7 +591,7 @@ class CallSession {
usermediaSenders.add(await pc!.addTrack(track, stream)); usermediaSenders.add(await pc!.addTrack(track, stream));
}); });
} }
emit(CallEvent.kFeedsChanged, streams); fireCallEvent(CallEvent.kFeedsChanged);
} }
if (purpose == SDPStreamMetadataPurpose.Usermedia) { if (purpose == SDPStreamMetadataPurpose.Usermedia) {
@ -637,15 +637,13 @@ class CallSession {
await newStream.initialize(); await newStream.initialize();
streams.add(newStream); streams.add(newStream);
} }
emit(CallEvent.kFeedsChanged, streams); fireCallEvent(CallEvent.kFeedsChanged);
Logs().i('Pushed remote stream (id="${stream.id}", purpose=$purpose)'); Logs().i('Pushed remote stream (id="${stream.id}", purpose=$purpose)');
} }
void setCallState(CallState newState) { void setCallState(CallState newState) {
final oldState = state;
state = newState;
_callStateController.add(newState); _callStateController.add(newState);
emit(CallEvent.kState, state, oldState); fireCallEvent(CallEvent.kState);
} }
void setLocalVideoMuted(bool muted) { void setLocalVideoMuted(bool muted) {
@ -672,7 +670,7 @@ class CallSession {
: TransceiverDirection.SendRecv); : TransceiverDirection.SendRecv);
} }
_updateMuteStatus(); _updateMuteStatus();
emit(CallEvent.kRemoteHoldUnhold, remoteOnHold); fireCallEvent(CallEvent.kRemoteHoldUnhold);
} }
bool get isRemoteOnHold => remoteOnHold; bool get isRemoteOnHold => remoteOnHold;
@ -792,7 +790,7 @@ class CallSession {
cleanUp(); cleanUp();
voip.delegate.handleCallEnded(this); voip.delegate.handleCallEnded(this);
if (shouldEmit) { if (shouldEmit) {
emit(CallEvent.kHangup, this); fireCallEvent(CallEvent.kHangup);
} }
} }
@ -1048,7 +1046,7 @@ class CallSession {
} }
final wpstream = it.first; final wpstream = it.first;
streams.removeWhere((element) => element.stream!.id == stream.id); streams.removeWhere((element) => element.stream!.id == stream.id);
emit(CallEvent.kFeedsChanged, streams); fireCallEvent(CallEvent.kFeedsChanged);
await wpstream.dispose(); await wpstream.dispose();
} }
@ -1078,7 +1076,7 @@ class CallSession {
} }
} }
void emit(CallEvent event, [dynamic arg1, dynamic arg2, dynamic arg3]) { void fireCallEvent(CallEvent event) {
_callEventController.add(event); _callEventController.add(event);
Logs().i('CallEvent: ${event.toString()}'); Logs().i('CallEvent: ${event.toString()}');
switch (event) { switch (event) {
@ -1104,28 +1102,19 @@ class CallSession {
void _getLocalOfferFailed(dynamic err) { void _getLocalOfferFailed(dynamic err) {
Logs().e('Failed to get local offer ${err.toString()}'); Logs().e('Failed to get local offer ${err.toString()}');
fireCallEvent(CallEvent.kError);
emit( lastError = CallError(
CallEvent.kError, CallErrorCode.LocalOfferFailed, 'Failed to get local offer!', err);
CallError(
CallErrorCode.LocalOfferFailed,
'Failed to get local offer!',
err,
),
);
terminate(CallParty.kLocal, CallErrorCode.LocalOfferFailed, false); terminate(CallParty.kLocal, CallErrorCode.LocalOfferFailed, false);
} }
void _getUserMediaFailed(dynamic err) { void _getUserMediaFailed(dynamic err) {
Logs().w('Failed to get user media - ending call ${err.toString()}'); Logs().w('Failed to get user media - ending call ${err.toString()}');
emit( fireCallEvent(CallEvent.kError);
CallEvent.kError, lastError = CallError(
CallError(
CallErrorCode.NoUserMedia, CallErrorCode.NoUserMedia,
'Couldn\'t start capturing media! Is your microphone set up and does this app have permission?', 'Couldn\'t start capturing media! Is your microphone set up and does this app have permission?',
err, err);
),
);
terminate(CallParty.kLocal, CallErrorCode.NoUserMedia, false); terminate(CallParty.kLocal, CallErrorCode.NoUserMedia, false);
} }