start method

Implementation

Future<ViewerSessionSnapshot> start() async {
  if (!{
    ViewerSessionPhase.idle,
    ViewerSessionPhase.left,
    ViewerSessionPhase.error,
  }.contains(_snapshot.phase)) {
    return _snapshot;
  }
  _stopped = false;
  _emit(_snapshot.copyWith(phase: ViewerSessionPhase.joining, error: ''));
  try {
    final session = await provider.join(roomName, displayName);
    if (_stopped) return _snapshot;
    if (session.viewerId.isEmpty) {
      throw StateError('The viewer session provider returned no viewerId.');
    }
    _emit(_snapshot.copyWith(
      phase: ViewerSessionPhase.watching,
      session: session,
      error: '',
    ));
    _startTimers();
  } catch (error) {
    _emit(_snapshot.copyWith(
      phase: ViewerSessionPhase.error,
      error: error.toString(),
    ));
  }
  return _snapshot;
}