dart-app-core/lib/log/log_writer_io.dart
2025-02-01 19:03:58 +09:00

64 lines
No EOL
1.8 KiB
Dart

import 'dart:io';
import 'package:dart_framework/platform/platform_base.dart';
import 'package:path/path.dart' as path;
import 'package:dart_framework/platform/isolate_manager.dart';
import 'package:dart_framework/utils/string_util.dart';
import 'package:dart_framework/data/isolate_data.dart';
class LogWriterIO extends IsolateBase implements LogWriter {
late int _id;
late File _file;
@override
void onReady(Object? initData) async {
if ((initData as String?) != null) {
var dir = Directory(initData as String);
if (dir.existsSync()) {
_file = File(path.normalize(
'${dir.path}/log_${getDates().replaceAll(' ', '_').replaceAll(':', '-')}.txt'));
await _file.create();
print('[LogWriterIO] onReady - path: ${_file.path}');
send(IsoMessege('ready', data: _file.path));
addEventListener('write', onWrite);
requester();
}
}
}
void requester() async {
while (true) {
await Future.delayed(const Duration(seconds: 3));
send(IsoMessege('request'));
}
}
void onWrite(Object? message) {
// print('write in file: $message');
if(!_file.existsSync()) _file.createSync(recursive: true);
_file.writeAsStringSync(message as String, mode: FileMode.append);
}
@override
void start(
String path, Map<String, void Function(Object?)> messageListenerMap) {
var handler =
IsolateManager.create<LogWriterIO>(LogWriterIO(), initData: path);
handler.addEventListener(IsolateEvent.ready, (data) => _id = data as int);
for (var element in messageListenerMap.entries) {
handler.addListener(element.key, element.value);
}
}
@override
void write(String log) {
IsolateManager.send(_id, IsoMessege('write', data: log));
}
@override
void end() {
IsolateManager.exit(_id);
}
}
LogWriter getLogWriter() => LogWriterIO();