From cfb9ba131c42411c19635468a6663dd3a8344814 Mon Sep 17 00:00:00 2001 From: toki Date: Mon, 20 Mar 2023 00:04:47 +0900 Subject: [PATCH] no message --- bin/main.dart | 7 ++-- lib/core/application.dart | 4 ++- lib/core/isolate_manager.dart | 26 +++----------- lib/core/log.dart | 10 ++++-- lib/io/log_writer_io.dart | 2 +- lib/utils/system_util.dart | 68 ++++++++++++++++++++++------------- 6 files changed, 65 insertions(+), 52 deletions(-) diff --git a/bin/main.dart b/bin/main.dart index fccc63d..b95e12f 100644 --- a/bin/main.dart +++ b/bin/main.dart @@ -1,5 +1,8 @@ +import 'package:dart_framework/core/application.dart'; import 'package:dart_framework/core/log.dart'; -Future main() async { - test(); +void main() async { + Application(() { + test(); + }, (error, stack) {}); } diff --git a/lib/core/application.dart b/lib/core/application.dart index ababf8d..5a9ce89 100644 --- a/lib/core/application.dart +++ b/lib/core/application.dart @@ -1,12 +1,14 @@ import 'dart:async'; import 'log.dart'; +import 'package:dart_framework/utils/system_util.dart' as system; -abstract class Application { +class Application { late Function(Object, StackTrace) writeLog; Application(Function() func, Function(Object, StackTrace) errorListener) { runZonedGuarded(() async { + system.initialize(); writeLog = (error, stack) => logError('$error:\n$stack'); func(); }, (error, stack) { diff --git a/lib/core/isolate_manager.dart b/lib/core/isolate_manager.dart index 0d290b2..8adc4e4 100644 --- a/lib/core/isolate_manager.dart +++ b/lib/core/isolate_manager.dart @@ -1,4 +1,3 @@ -import 'dart:mirrors'; import 'dart:isolate'; import 'dart:async'; @@ -7,7 +6,8 @@ import 'package:dart_framework/data/isolate_data.dart'; /// ********************** Test ************************* /// void test() { var initData = {"param0": "value0"}; - IsolateManager.create(initData, (isoEvent, data) async { + IsolateManager.create(IsolateTemplate(), initData, + (isoEvent, data) async { if (isoEvent == IsolateEvent.ready) { int id = data as int; IsolateManager.sendBroadcast(IsoMessege('test1')); @@ -73,19 +73,20 @@ class IsolateManager { final Map> _innerEventMap = {}; static void create( + T inst, Object? initData, Function(IsolateEvent, Object?) isolateEventListener, Function(IsoMessege) messageListener) async { - to._create(initData, isolateEventListener, messageListener); + to._create(inst, initData, isolateEventListener, messageListener); } void _create( + T inst, Object? initData, Function(IsolateEvent, Object?) isolateEventListener, Function(IsoMessege) messageListener) async { final isoListener = ReceivePort(); var id = nonce; - T inst = Activator.createInstance(T, {}); _isoMap[id] = inst; _addInnerEvent(id, _IsolateInnerEvent.ready, (message) { inst.isoListener = message as SendPort; @@ -232,20 +233,3 @@ class IsolateBase { isoListener.send(message); } } - -class Activator { - static createInstance(Type type, Map namedArguments, - [Symbol? constructor, List? arguments]) { - constructor ??= const Symbol(""); - arguments ??= const []; - - var typeMirror = reflectType(type); - if (typeMirror is ClassMirror) { - return typeMirror - .newInstance(constructor, arguments, namedArguments) - .reflectee; - } else { - throw ArgumentError("Cannot create the instance of the type '$type'."); - } - } -} diff --git a/lib/core/log.dart b/lib/core/log.dart index ae998be..8a64b4d 100644 --- a/lib/core/log.dart +++ b/lib/core/log.dart @@ -98,9 +98,9 @@ class Log { initializeLog(); } - void initializeLog() { + void initializeLog() async { if (path == null) { - path = getDataPath(); + path = await getDataPath(); if (path!.isNotEmpty) { path = '$path/logs'; var dir = Directory(path!); @@ -116,7 +116,7 @@ class Log { if (message.type == 'request') { write(); } else if (message.type == 'ready') { - log('Log path: ${message.message}'); + appendString('Log path: ${message.message}'); } } @@ -131,6 +131,10 @@ class Log { } } + void appendString(String message) { + append(LogItem(message, LogType.verbose)); + } + void append(LogItem item) { logs.insert(0, item); } diff --git a/lib/io/log_writer_io.dart b/lib/io/log_writer_io.dart index 24222e0..38d1080 100644 --- a/lib/io/log_writer_io.dart +++ b/lib/io/log_writer_io.dart @@ -40,7 +40,7 @@ class LogWriterIO extends IsolateBase { int _id = 0; void startLog(String path, Function(IsoMessege) listener) { - IsolateManager.create(path, (event, data) { + IsolateManager.create(LogWriterIO(), path, (event, data) { if (event == IsolateEvent.ready) { _id = data as int; } diff --git a/lib/utils/system_util.dart b/lib/utils/system_util.dart index 881b7f5..78b27fc 100644 --- a/lib/utils/system_util.dart +++ b/lib/utils/system_util.dart @@ -7,6 +7,16 @@ import 'package:path/path.dart'; import 'package:yaml/yaml.dart'; import 'package:path/path.dart' as path; +late Future Function() getUserPath; +late Future Function() getProjectName; +late Future Function() getDataPath; + +void initialize() { + getUserPath = getUserPath_; + getProjectName = getProjectName_; + getDataPath = getDataPath_; +} + Map?> envArguments(List arguments) { var dic = ?>{}; var list = []; @@ -35,19 +45,6 @@ Map?> envArguments(List arguments) { return dic; } -String? getUserPath() { - String? home = ''; - Map envVars = Platform.environment; - if (Platform.isMacOS) { - home = envVars['HOME']; - } else if (Platform.isLinux) { - home = envVars['HOME']; - } else if (Platform.isWindows) { - home = envVars['UserProfile']; - } - return home; -} - String? _getKey(String value) { String? key; if (value.indexOf('-') == 0) { @@ -113,26 +110,49 @@ Future readFileByte(String filePath) async { bytes = Uint8List.fromList(value); print('reading of bytes is completed'); }).catchError((onError) { - print( - 'Exception Error while reading audio from path:' + onError.toString()); + print('Exception Error while reading audio from path:$onError'); }); c.complete(bytes); return c.future; } -String getProjectName() { - return path.basename(path.dirname( - path.dirname(Platform.script.toFilePath(windows: Platform.isWindows)))); +Future getUserPath_() async { + var c = Completer(); + String home = ''; + Map envVars = Platform.environment; + if (Platform.isMacOS) { + home = envVars['HOME']!; + } else if (Platform.isLinux) { + home = envVars['HOME']!; + } else if (Platform.isWindows) { + home = envVars['UserProfile']!; + } + c.complete(home); + return c.future; } -String? getDataPath() { - String? path = getUserPath(); +Future getDataPath_() async { + var c = Completer(); + String path = await getUserPath(); if (Platform.isMacOS) { - path = '$path/Library/Application Support/${getProjectName()}'; + path = '$path/Library/Application Support/${await getProjectName()}'; } else if (Platform.isLinux) { - path = '$path/.config/${getProjectName()}'; + path = '$path/.config/${await getProjectName()}'; } else if (Platform.isWindows) { - path = '$path/AppData/Local/${getProjectName()}'; + path = '$path/AppData/Local/${await getProjectName()}'; } - return path; + c.complete(path); + return c.future; +} + +Future getProjectName_() async { + var c = Completer(); + var name = + path.dirname(Platform.script.toFilePath(windows: Platform.isWindows)); + print(name); + if (path.basename(name) == 'bin') { + name = path.dirname(name); + } + c.complete(path.basename(name)); + return c.future; }