Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Generated by the `index_generator` package with the `index_generator.yaml` configuration file.

library _coins_config;
library;

export 'asset_parser.dart';
export 'coin_config_provider.dart';
Expand All @@ -10,6 +10,6 @@ export 'coin_config_storage.dart';
export 'config_transform.dart';
export 'custom_token_storage.dart';
export 'custom_token_store.dart';
export 'no_op_custom_token_storage.dart';
export 'github_coin_config_provider.dart';
export 'local_asset_coin_config_provider.dart';
export 'no_op_custom_token_storage.dart';
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,3 @@ export 'slp_activation_params.dart';
export 'tendermint_activation_params.dart';
export 'utxo_activation_params.dart';
export 'zhtlc_activation_params.dart';
export 'package:komodo_defi_rpc_methods/src/common_structures/activation/activation_params/activation_params.dart'
show PrivKeyPolicySerializer;
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export 'nft/nft_metadata.dart';
export 'nft/nft_transfer.dart';
export 'nft/nft_transfer_filter.dart';
export 'nft/withdraw_nft_data.dart';
export 'orderbook/order_address.dart';
export 'orderbook/order_info.dart';
export 'orderbook/order_type.dart';
export 'orderbook/request_by.dart';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,7 @@ export 'protocol_strategies/tendermint_activation_strategy.dart';
export 'protocol_strategies/tendermint_task_activation_strategy.dart';
export 'protocol_strategies/tendermint_token_activation_strategy.dart';
export 'protocol_strategies/utxo_activation_strategy.dart';
export 'protocol_strategies/zhtlc_activation_progress.dart';
export 'protocol_strategies/zhtlc_activation_progress_estimator.dart';
export 'protocol_strategies/zhtlc_activation_strategy.dart';
export 'shared_activation_coordinator.dart';
54 changes: 37 additions & 17 deletions packages/komodo_defi_sdk/lib/src/balances/balance_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -126,33 +126,53 @@ class BalanceManager implements IBalanceManager {
/// Reset all internal state when wallet changes
Future<void> _resetState() async {
_logger.fine('Resetting state');
// Cancel all active watchers
for (final subscription in _activeWatchers.values) {
await subscription.cancel();
}
final stopwatch = Stopwatch()..start();

final List<Future<void>> cleanupFutures = <Future<void>>[];
final List<StreamSubscription<dynamic>> watcherSubs = _activeWatchers.values
.toList();
Comment thread
takenagain marked this conversation as resolved.
_activeWatchers.clear();

// Add errors to existing controllers to signal disconnection
for (final controller in _balanceControllers.values) {
for (final subscription in watcherSubs) {
cleanupFutures.add(
subscription.cancel().catchError((Object e, StackTrace s) {
_logger.warning('Error cancelling balance watcher', e, s);
}),
);
}

final List<StreamController<BalanceInfo>> controllers = _balanceControllers
.values
.toList();
Comment thread
takenagain marked this conversation as resolved.
_balanceControllers.clear();

for (final controller in controllers) {
if (!controller.isClosed) {
// Add error to signal disconnection before closing
controller.addError(
StateError('Wallet changed, reconnecting balance watchers'),
const WalletChangedDisconnectException(
'Wallet changed, reconnecting balance watchers',
),
);

cleanupFutures.add(
controller.close().catchError((Object e, StackTrace s) {
_logger.warning('Error closing balance controller', e, s);
}),
);
}
}

// Clear caches
_balanceCache.clear();
if (cleanupFutures.isNotEmpty) {
await Future.wait(cleanupFutures);
}

// Restart balance watchers for existing controllers with the new wallet
final existingWatches = Map<AssetId, StreamController<BalanceInfo>>.from(
_balanceControllers,
_balanceCache.clear();
stopwatch.stop();
_logger.fine(
'State reset completed in ${stopwatch.elapsedMilliseconds}ms '
'(${watcherSubs.length} subscriptions, ${controllers.length} controllers)',
);
for (final entry in existingWatches.entries) {
if (!entry.value.isClosed) {
_startWatchingBalance(entry.key, true);
}
}
}

@override
Expand Down
Loading
Loading