addAgoraEventHandlers method
void
addAgoraEventHandlers()
Implementation
void addAgoraEventHandlers() {
RtcEngineEventHandler handler = RtcEngineEventHandler();
handler.tokenPrivilegeWillExpire = (String token) async {
printLog('tokenPrivilegeWillExpire: $token');
String? rtcToken = await widget.delegate?.getRtcToken(channelId!);
if (rtcToken?.isEmpty == false) {
rtcEngine?.renewToken(rtcToken!);
}
};
handler.lastmileQuality = (NetworkQuality quality) {
printLog('lastmileQuality: ${quality.index}');
rtcEngine?.disableLastmileTest();
if (quality == NetworkQuality.Down) {
widget.delegate?.onShowToast(6);
}
if (call && callStatus != 0) {
callStatus = 0;
willSendVideo(0);
} else {
callStatus = -1;
}
};
handler.joinChannelSuccess = (String channel, int uid, int elapsed) {
printLog('onJoinChannelSuccess: $channel, uid: $uid, elapsed: $elapsed');
};
handler.userJoined = (int uid, int elapsed) {
printLog('onUserJoined: uid: $uid, elapsed: $elapsed');
userJoinedRate = DateTime.now().millisecondsSinceEpoch;
};
handler.localVideoStateChanged =
(LocalVideoStreamState state, LocalVideoStreamError error) async {
printLog('onLocalVideoStateChanged: $state $error');
if (state == LocalVideoStreamState.Encoding) {
localVideoStatus = true;
} else {
widget.delegate?.onShowLocalVideo(true);
}
};
handler.firstRemoteVideoFrame =
(int uid, int width, int height, int elapsed) {
printLog('firstRemoteVideoFrame: $uid $elapsed');
if (callStatus == 0) {
callStatus = 1;
widget.delegate?.onCallStatus(callStatus);
if (type == 1) {
matchSuccess();
} else {
callStart();
}
}
};
handler.remoteVideoStateChanged = (int uid, VideoRemoteState state,
VideoRemoteStateReason reason, int elapsed) {
printLog('onRemoteVideoStateChanged: $uid $state $reason $elapsed');
if (state == VideoRemoteState.Decoding) {
remoteVideoStatus = true;
if (userUid == null) {
userUid = uid;
if (!mounted) {
return;
}
setState(() {});
}
} else {
widget.delegate?.onShowLocalVideo(false);
}
};
handler.networkTypeChanged = (NetworkType type) {
printLog('networkTypeChanged: $type');
};
handler.networkQuality =
(int uid, NetworkQuality txQuality, NetworkQuality rxQuality) {
printLog('onNetworkQuality: $uid $txQuality $rxQuality');
if (callStatus != 1 || currentRate < 30) return;
//下行网络
if (rxQuality == NetworkQuality.Excellent ||
rxQuality == NetworkQuality.Good ||
rxQuality == NetworkQuality.Poor) {
quality++;
if (quality >= 3) {
quality = 0;
widget.delegate?.onShowNetText(null);
}
} else if (rxQuality == NetworkQuality.Unknown ||
rxQuality == NetworkQuality.Bad ||
rxQuality == NetworkQuality.VBad) {
quality = 0;
widget.delegate?.onShowNetText(uid == 0);
}
};
handler.userOffline = (int uid, UserOfflineReason reason) {
printLog('onUserOffline: $uid, reason: $reason');
if (currentRate ~/ 60 > 0 &&
isSoonMoney &&
(currentRate % 60 >= 55 || currentRate % 60 < 5)) {
return;
}
if (offline) {
return;
}
offline = true;
widget.delegate
?.onRemoteUserLeft(reason == UserOfflineReason.Dropped ? 3 : 1);
};
handler.leaveChannel = (RtcStats stats) {
printLog('onLeaveChannel');
if (callStatus != 1) {
return;
}
if (!offline) {
widget.delegate?.onRemoteUserLeft(0);
}
};
handler.error = (ErrorCode err) {
printLog('onError: $err, index: ${err.index}');
if (!err.toString().contains('ErrorCode.Adm')) {
if (callStatus == 0) {
if (err == ErrorCode.ClientIsBannedByServer) {
widget.delegate?.onShowToast(1);
} else {
widget.delegate?.onShowToast(2);
}
willSendVideo(1);
widget.delegate?.onNormalPop();
} else if (callStatus == 1) {
widget.delegate?.onRemoteUserLeft(4);
} else {
widget.delegate?.onNormalPop(hangup: false);
}
}
};
handler.rtcStats = (RtcStats stats) {
if (!mounted) {
return;
}
// printLog('onRtcStats:${stats.totalDuration}');
if (showTime && callStatus == 1) {
currentCall();
Future.delayed(const Duration(seconds: 1), () {
if (!mounted) {
return;
}
currentCall();
});
}
};
rtcEngine?.setEventHandler(handler);
}