Pass adaptive_stream when connecting (#109)

* impl

* ignore fvm files

* Update pubspec.lock

* comment
This commit is contained in:
Hiroshi Horie
2022-04-26 02:57:24 +09:00
committed by GitHub
parent c43cd4b427
commit e23131fbbf
10 changed files with 84 additions and 52 deletions
+13 -5
View File
@@ -61,7 +61,9 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
// remember url and token for reconnect
String? url;
String? token;
ConnectOptions? connectOptions;
ConnectOptions connectOptions;
RoomOptions roomOptions;
bool _subscriberPrimary = false;
@@ -71,6 +73,8 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
late final _signalListener = signalClient.createListener(synchronized: true);
Engine({
required this.connectOptions,
required this.roomOptions,
SignalClient? signalClient,
PeerConnectionCreate? peerConnectionCreate,
}) : signalClient = signalClient ?? SignalClient(LiveKitWebSocket.connect),
@@ -93,12 +97,15 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
Future<void> connect(
String url,
String token,
String token, {
ConnectOptions? connectOptions,
) async {
RoomOptions? roomOptions,
}) async {
this.url = url;
this.token = token;
this.connectOptions = connectOptions ?? const ConnectOptions();
// update new options (if exists)
this.connectOptions = connectOptions ?? this.connectOptions;
this.roomOptions = roomOptions ?? this.roomOptions;
_updateConnectionState(ConnectionState.connecting);
@@ -108,6 +115,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
url,
token,
connectOptions: this.connectOptions,
roomOptions: this.roomOptions,
);
// wait for join response
@@ -262,6 +270,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
url!,
token!,
connectOptions: connectOptions,
roomOptions: roomOptions,
reconnect: true,
);
@@ -320,7 +329,6 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
// RTCConfiguration? config;
// use server-provided iceServers if not provided by user
final connectOptions = this.connectOptions ?? const ConnectOptions();
final serverIceServers =
_serverProvidedIceServers.map((e) => e.toSDKType()).toList();
+19 -22
View File
@@ -27,8 +27,11 @@ import 'engine.dart';
/// * active speakers are different
/// {@category Room}
class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
// expose engine's params
/// connection state of the room
ConnectionState get connectionState => engine.connectionState;
ConnectOptions get connectOptions => engine.connectOptions;
RoomOptions get roomOptions => engine.roomOptions;
/// map of SID to RemoteParticipant
UnmodifiableMapView<String, RemoteParticipant> get participants =>
@@ -64,12 +67,6 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
UnmodifiableListView<Participant>(_activeSpeakers);
List<Participant> _activeSpeakers = [];
ConnectOptions? get connectOptions => _connectOptions;
ConnectOptions? _connectOptions;
RoomOptions? get roomOptions => _roomOptions;
RoomOptions? _roomOptions;
final Engine engine;
// suppport for multiple event listeners
late final EventsListener<EngineEvent> _engineListener;
@@ -77,12 +74,15 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
late final EventsListener<SignalEvent> _signalListener;
Room({
ConnectOptions? connectOptions,
RoomOptions? roomOptions,
ConnectOptions connectOptions = const ConnectOptions(),
RoomOptions roomOptions = const RoomOptions(),
Engine? engine,
}) : _connectOptions = connectOptions,
_roomOptions = roomOptions,
engine = engine ?? Engine() {
}) : engine = engine ??
Engine(
connectOptions: connectOptions,
roomOptions: roomOptions,
) {
//
_engineListener = this.engine.createListener();
_setUpEngineListeners();
@@ -116,13 +116,13 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
String token, {
ConnectOptions? connectOptions,
RoomOptions? roomOptions,
}) async {
// update options if provided
_connectOptions = connectOptions ?? _connectOptions;
_roomOptions = roomOptions ?? this.roomOptions;
return engine.connect(url, token, this.connectOptions);
}
}) =>
engine.connect(
url,
token,
connectOptions: connectOptions,
roomOptions: roomOptions,
);
void _setUpSignalListeners() => _signalListener
..on<SignalJoinResponseEvent>((event) {
@@ -157,10 +157,8 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
..on<SignalStreamStateUpdatedEvent>(
(event) => _onSignalStreamStateUpdateEvent(event.updates))
..on<SignalSubscribedQualityUpdatedEvent>((event) {
// Signal for Dynacast
final options = roomOptions ?? const RoomOptions();
// Dynacast is off or is unsupported
if (!options.dynacast || _serverVersion == '0.15.1') {
if (!roomOptions.dynacast || _serverVersion == '0.15.1') {
logger.fine('Received subscribed quality update'
' but Dynacast is off or server version is not supported.');
return;
@@ -456,7 +454,6 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
}
Future<void> _sendSyncState() async {
final connectOptions = this.connectOptions ?? const ConnectOptions();
final sendUnSub = connectOptions.autoSubscribe;
final participantTracks =
participants.values.map((e) => e.participantTracks());
+4 -1
View File
@@ -45,13 +45,15 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
Future<void> connect(
String uriString,
String token, {
ConnectOptions? connectOptions,
required ConnectOptions connectOptions,
required RoomOptions roomOptions,
bool reconnect = false,
}) async {
final rtcUri = await Utils.buildUri(
uriString,
token: token,
connectOptions: connectOptions,
roomOptions: roomOptions,
reconnect: reconnect,
);
@@ -85,6 +87,7 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
uriString,
token: token,
connectOptions: connectOptions,
roomOptions: roomOptions,
validate: true,
forceSecure: rtcUri.isSecureScheme,
);