feature: update owners by websocket
This commit is contained in:
parent
49e74feb4f
commit
116bacf428
6 changed files with 139 additions and 23 deletions
|
|
@ -1,5 +1,8 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:rxdart/rxdart.dart';
|
||||
import 'package:seshat/data/services/api_client.dart';
|
||||
import 'package:seshat/data/services/websocket_client.dart';
|
||||
import 'package:seshat/domain/models/owner.dart';
|
||||
|
|
@ -14,6 +17,10 @@ class OwnerRepository {
|
|||
|
||||
final ApiClient _apiClient;
|
||||
final WebsocketClient _wsClient;
|
||||
final BehaviorSubject<Owner> _ownersController = BehaviorSubject<Owner>(
|
||||
sync: true,
|
||||
);
|
||||
late final StreamSubscription sub;
|
||||
List<Owner>? _cachedOwners;
|
||||
|
||||
Future<Result<Owner>> postOwner(
|
||||
|
|
@ -29,29 +36,27 @@ class OwnerRepository {
|
|||
Future<Result<List<Owner>>> getOwners() async {
|
||||
if (_cachedOwners == null) {
|
||||
final result = await _apiClient.getOwners();
|
||||
_wsClient.connect();
|
||||
|
||||
if (result is Ok<List<Owner>>) {
|
||||
_cachedOwners = result.value;
|
||||
}
|
||||
|
||||
sub = _wsClient.owners.listen((owner) {
|
||||
debugPrint("\n\n\n\n[3] Added : $owner\n\n\n\n");
|
||||
_cachedOwners!.add(owner);
|
||||
_ownersController.add(owner);
|
||||
});
|
||||
|
||||
return result;
|
||||
} else {
|
||||
return Result.ok(_cachedOwners!);
|
||||
}
|
||||
}
|
||||
|
||||
Stream<Owner> liveOwners() async* {
|
||||
await for (String data in await _wsClient.connect()) {
|
||||
Map<String, dynamic> decodedData = jsonDecode(
|
||||
data,
|
||||
).cast<Map<String, dynamic>>();
|
||||
Owner owner = Owner.fromJSON(decodedData);
|
||||
if (_cachedOwners == null) {
|
||||
await getOwners();
|
||||
} else {
|
||||
_cachedOwners!.add(owner);
|
||||
yield* Stream.value(owner);
|
||||
}
|
||||
}
|
||||
Stream<Owner> get liveOwners => _ownersController.stream;
|
||||
|
||||
dispose() {
|
||||
sub.cancel();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Reference in a new issue