115 lines
3.9 KiB
Dart
115 lines
3.9 KiB
Dart
library EasyDartModule;
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:EasyDartModule/base/database/DataBase.dart';
|
|
import 'package:EasyDartModule/base/database/impl/MongoDb.dart';
|
|
import 'package:EasyDartModule/base/database/impl/SqliteDb.dart';
|
|
import 'package:EasyDartModule/base/discovery/Discovery.dart';
|
|
import 'package:EasyDartModule/base/discovery/impl/NacosDiscovery.dart';
|
|
import 'package:EasyDartModule/base/http/TraceDio.dart';
|
|
import 'package:EasyDartModule/base/logger/Logger.dart';
|
|
import 'package:EasyDartModule/base/logger/impl/ConsoleLogger.dart';
|
|
import 'package:EasyDartModule/base/logger/impl/LokiLogger.dart';
|
|
import 'package:EasyDartModule/base/mqtt/mqtt.dart';
|
|
import 'package:EasyDartModule/base/redis/redis.dart';
|
|
import 'package:EasyDartModule/base/storage/Storage.dart';
|
|
import 'package:EasyDartModule/base/storage/impl/MinIoStorage.dart';
|
|
import 'package:EasyDartModule/base/webserver/WebServer.dart';
|
|
import 'package:EasyDartModule/base/webserver/impl/ShelfWebServer.dart'
|
|
if (dart.library.html) 'package:EasyDartModule/base/webserver/impl/ShelfWebServer_none.dart';
|
|
import 'package:EasyDartModule/base/websocket/WebSocket.dart';
|
|
import 'package:event_bus/event_bus.dart';
|
|
|
|
export 'package:shelf/shelf.dart';
|
|
export 'package:mongo_dart/mongo_dart.dart';
|
|
export 'package:EasyDartModule/base/database/impl/SqliteDb.dart';
|
|
|
|
class EasyDartModule {
|
|
static Discovery get discovery => Discovery.getInstance();
|
|
static DataBase get dataBase => DataBase.getInstance();
|
|
static WebServer get webServer => WebServer.getInstance();
|
|
static Logger get logger => Logger.getInstance();
|
|
static TraceDio get dio => TraceDio.getInstance();
|
|
static Mqtt get mqtt => Mqtt.getInstance();
|
|
static Storage get storage => Storage.getInstance();
|
|
static Redis get redis => Redis.getInstance();
|
|
static WebSocket get websocket => WebSocket.getInstance();
|
|
// 全局事件总线
|
|
static final EventBus _eventBus = EventBus();
|
|
static EventBus get eventBus => _eventBus;
|
|
|
|
static bool init({
|
|
DiscoveryConfig? discoveryConfig,
|
|
DataBaseConfig? dataBaseConfig,
|
|
LoggerConfig? loggerConfig,
|
|
MqttConfig? mqttConfig,
|
|
StorageConfig? storageConfig,
|
|
RedisConfig? redisConfig,
|
|
WebSocketConfig? webSocketConfig,
|
|
}) {
|
|
if (discoveryConfig != null) {
|
|
//nacos注册配置中心
|
|
Discovery.setInstance(NacosDiscovery(discoveryConfig));
|
|
}
|
|
if (dataBaseConfig != null) {
|
|
switch (dataBaseConfig.type) {
|
|
case DataBaseType.mongo:
|
|
DataBase.setInstance(MongoDb(dataBaseConfig));
|
|
break;
|
|
case DataBaseType.sqlite:
|
|
DataBase.setInstance(SqliteDb.fromConfig(dataBaseConfig));
|
|
break;
|
|
}
|
|
}
|
|
if (mqttConfig != null) {
|
|
//mqtt
|
|
Mqtt.setInstance(Mqtt(mqttConfig));
|
|
mqtt.connect();
|
|
}
|
|
if (storageConfig != null) {
|
|
//s3存储
|
|
Storage.setInstance(MinioStorage(storageConfig));
|
|
}
|
|
if (redisConfig != null) {
|
|
Redis.setInstance(Redis(redisConfig));
|
|
redis.connect();
|
|
}
|
|
if (loggerConfig != null) {
|
|
//初始化日志
|
|
if (loggerConfig.type == LoggerType.LOKI) {
|
|
Logger.setInstance(LokiLogger(loggerConfig));
|
|
} else {
|
|
Logger.setInstance(ConsoleLogger(loggerConfig));
|
|
}
|
|
//web服务器
|
|
WebServer.setInstance(ShelfWebServer(logger));
|
|
//Dio组件
|
|
TraceDio.setInstance(TraceDio(logger));
|
|
} else {
|
|
//无日志Dio
|
|
TraceDio.setInstance(TraceDio(null));
|
|
}
|
|
|
|
if (webSocketConfig != null) {
|
|
WebSocket.setInstance(WebSocket(webSocketConfig));
|
|
websocket.connect();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
static void safeRun(Function() app, {Function(Object, StackTrace)? onError}) {
|
|
runZonedGuarded(
|
|
app,
|
|
(error, stack) {
|
|
if (onError != null) {
|
|
onError(error, stack);
|
|
} else {
|
|
print('Caught in zone: $error');
|
|
print("StackTrace: $stack");
|
|
}
|
|
},
|
|
);
|
|
}
|
|
}
|