init method

Future<void> init({
  1. bool reconnectIfStopped = true,
})

Implementation

Future<void> init({bool reconnectIfStopped = true}) async {
  Tailscale.init(stateDir: await _stateDir);

  final status = await _engine.status();
  _updateState(status.state);

  _engineStateSubscription?.cancel();
  _engineStateSubscription = _engine.onStateChange.listen((state) {
    final prevState = _state;

    logger.log('Tailscale status change from $prevState->$state');

    _updateState(state);

    final disconnected =
        state == NodeState.stopped || state == NodeState.noState;
    if (prevState == NodeState.running && disconnected && !_disconnecting) {
      unawaited(disconnect());
    }
  });

  final clientId = await _clientId.read();
  await _peerPublicKey.read();
  if (clientId == null) {
    await _clientId.write(generateClientId());
  }

  for (final client in subclients) {
    await client.init();
  }

  if (reconnectIfStopped && state == NodeState.stopped) {
    await connect();
  }
}