void onRoomStateChanged(QNRoomState state);
void onRoomLeft();
void onRemoteUserJoined(String remoteUserId, String userData);
void onRemoteUserReconnecting(String remoteUserId);
void onRemoteUserReconnected(String remoteUserId);
void onRemoteUserLeft(String remoteUserId);
void onLocalPublished(List<QNTrackInfo> trackInfoList);
void onRemotePublished(String remoteUserId, List<QNTrackInfo> trackInfoList);
void onRemoteUnpublished(String remoteUserId, List<QNTrackInfo> trackInfoList);
void onRemoteUserMuted(String remoteUserId, List<QNTrackInfo> trackInfoList);
void onSubscribed(String remoteUserId, List<QNTrackInfo> trackInfoList);
void onSubscribedProfileChanged(String remoteUserId, List<QNTrackInfo> trackInfoList);
void onKickedOut(String userId);
void onStatisticsUpdated(QNStatisticsReport report);
void onRemoteStatisticsUpdated(List<QNStatisticsReport> reports);
void onAudioRouteChanged(QNAudioDevice routing);
void onCreateMergeJobSuccess(String mergeJobId);
void onCreateForwardJobSuccess(String forwardJobId);
void onError(int errorCode, String description);
void onMessageReceived(QNCustomMessage message);
void onClientRoleChanged(QNClientRole clientRole);
void onMediaRelayStateChanged(Map<String, QNMediaRelayState> stateMap);