import 'package:flutter/foundation.dart'; import '../../common.dart'; class Peer { final String id; final String username; final String hostname; final String platform; final List tags; bool online = false; Peer.fromJson(String id, Map json) : id = id, username = json['username'] ?? '', hostname = json['hostname'] ?? '', platform = json['platform'] ?? '', tags = json['tags'] ?? []; Peer({ required this.id, required this.username, required this.hostname, required this.platform, required this.tags, }); Peer.loading() : this( id: '...', username: '...', hostname: '...', platform: '...', tags: []); } class Peers extends ChangeNotifier { late String _name; late var _peers; static const cbQueryOnlines = 'callback_query_onlines'; Peers(String name, List peers) { _name = name; _peers = peers; gFFI.ffiModel.platformFFI.registerEventHandler(cbQueryOnlines, _name, (evt) { _updateOnlineState(evt); }); } List get peers => _peers; @override void dispose() { gFFI.ffiModel.platformFFI.unregisterEventHandler(cbQueryOnlines, _name); super.dispose(); } Peer getByIndex(int index) { if (index < _peers.length) { return _peers[index]; } else { return Peer.loading(); } } int getPeersCount() { return _peers.length; } void _updateOnlineState(Map evt) { evt['onlines'].split(',').forEach((online) { for (var i = 0; i < _peers.length; i++) { if (_peers[i].id == online) { _peers[i].online = true; } } }); evt['offlines'].split(',').forEach((offline) { for (var i = 0; i < _peers.length; i++) { if (_peers[i].id == offline) { _peers[i].online = false; } } }); notifyListeners(); } }