feat(linux): Get the isolate implementation somewhat working
This commit is contained in:
53
lib/src/service/background/isolate.dart
Normal file
53
lib/src/service/background/isolate.dart
Normal file
@@ -0,0 +1,53 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:isolate';
|
||||
import 'dart:ui';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:moxlib/moxlib.dart';
|
||||
import 'package:moxxy_native/src/service/background/base.dart';
|
||||
import 'package:moxxy_native/src/service/config.dart';
|
||||
import 'package:moxxy_native/src/service/datasender/types.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
class IsolateBackgroundService extends BackgroundService {
|
||||
IsolateBackgroundService(this._sendPort);
|
||||
final SendPort _sendPort;
|
||||
final ReceivePort receivePort = ReceivePort();
|
||||
|
||||
/// A logger.
|
||||
final Logger _log = Logger('IsolateBackgroundService');
|
||||
|
||||
@override
|
||||
Future<void> send(BackgroundEvent event, {String? id}) async {
|
||||
final data = DataWrapper(
|
||||
id ?? const Uuid().v4(),
|
||||
event,
|
||||
);
|
||||
|
||||
_sendPort.send(jsonEncode(data.toJson()));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> init(
|
||||
ServiceConfig config,
|
||||
) async {
|
||||
// Ensure that the Dart executor is ready to use plugins
|
||||
// NOTE: We're not allowed to use this here. Maybe reusing the RootIsolateToken
|
||||
// (See IsolateForegroundService) helps?
|
||||
// WidgetsFlutterBinding.ensureInitialized();
|
||||
DartPluginRegistrant.ensureInitialized();
|
||||
|
||||
// Register the channel for Foreground -> Service communication
|
||||
receivePort.listen((data) async {
|
||||
// TODO(Unknown): Maybe do something smarter like pigeon and use Lists instead of Maps
|
||||
await config
|
||||
.handleData(jsonDecode(data! as String) as Map<String, dynamic>);
|
||||
});
|
||||
|
||||
// Start execution
|
||||
_log.finest('Setup complete. Calling main entrypoint...');
|
||||
await config.entrypoint(config.initialLocale);
|
||||
}
|
||||
|
||||
@override
|
||||
void setNotificationBody(String body) {}
|
||||
}
|
||||
Reference in New Issue
Block a user