This commit is contained in:
2025-02-28 17:47:21 +08:00
parent 3f042fec78
commit 79cba2ea7a
3 changed files with 37 additions and 18 deletions

View File

@@ -67,7 +67,11 @@ class EasyDartModule {
WebServer.setInstance(ShelfWebServer(logger)); WebServer.setInstance(ShelfWebServer(logger));
//Dio组件 //Dio组件
TraceDio.setInstance(TraceDio(logger)); TraceDio.setInstance(TraceDio(logger));
} else {
//无日志Dio
TraceDio.setInstance(TraceDio(null));
} }
if (webSocketConfig != null) { if (webSocketConfig != null) {
WebSocket.setInstance(WebSocket(webSocketConfig)); WebSocket.setInstance(WebSocket(webSocketConfig));
websocket.connect(); websocket.connect();

View File

@@ -5,20 +5,20 @@ import 'package:uuid/uuid.dart';
class TraceDio { class TraceDio {
final Dio _dio; final Dio _dio;
final Logger _logger; final Logger? _logger;
final Uuid uuid = Uuid(); final Uuid uuid = Uuid();
static late TraceDio _traceDio; static late TraceDio _traceDio;
String? token; String? token;
TraceDio(Logger logger) TraceDio(Logger? logger)
: _dio = Dio(), : _dio = Dio(),
_logger = logger { _logger = logger {
// 配置 Dio // 配置 Dio
// 设置连接超时 // 设置连接超时
_dio.options.connectTimeout = Duration(seconds: 5); _dio.options.connectTimeout = Duration(seconds: 60);
// 设置接收超时 // 设置接收超时
_dio.options.receiveTimeout = Duration(seconds: 5); _dio.options.receiveTimeout = Duration(seconds: 60);
//保留原始大小写 //保留原始大小写
_dio.options.preserveHeaderCase = true; _dio.options.preserveHeaderCase = true;
@@ -36,7 +36,7 @@ class TraceDio {
options.headers['X-Span-ID'] = spanId; options.headers['X-Span-ID'] = spanId;
} }
// 记录请求日志 // 记录请求日志
_logger.info('Sending request: ${options.method} ${options.uri}', _logger?.info('Sending request: ${options.method} ${options.uri}',
tag: "DIO", traceId: traceId, spanId: spanId); tag: "DIO", traceId: traceId, spanId: spanId);
return handler.next(options); // 继续请求 return handler.next(options); // 继续请求
}, },
@@ -44,7 +44,7 @@ class TraceDio {
// 记录响应日志 // 记录响应日志
String? traceId = response.headers.value('X-Trace-ID'); String? traceId = response.headers.value('X-Trace-ID');
String? spanId = response.headers.value('X-Span-ID'); String? spanId = response.headers.value('X-Span-ID');
_logger.info( _logger?.info(
'Response received: ${response.statusCode} ${response.statusMessage}', 'Response received: ${response.statusCode} ${response.statusMessage}',
tag: "DIO", tag: "DIO",
traceId: traceId, traceId: traceId,
@@ -58,7 +58,7 @@ class TraceDio {
// 记录错误日志 // 记录错误日志
String? traceId = e.requestOptions.headers['X-Trace-ID']; String? traceId = e.requestOptions.headers['X-Trace-ID'];
String? spanId = e.requestOptions.headers['X-Span-ID']; String? spanId = e.requestOptions.headers['X-Span-ID'];
_logger.error('Request failed: ${e.message}', _logger?.error('Request failed: ${e.message}',
tag: "DIO", traceId: traceId, spanId: spanId); tag: "DIO", traceId: traceId, spanId: spanId);
return handler.next(e); // 继续处理错误 return handler.next(e); // 继续处理错误
}, },
@@ -93,45 +93,57 @@ class TraceDio {
Future<Response> get(String url, Future<Response> get(String url,
{Map<String, dynamic>? queryParameters, {Map<String, dynamic>? queryParameters,
sf.Request? request, sf.Request? request,
ResponseType? responseType}) async { ResponseType? responseType,
Duration? receiveTimeout}) async {
return await _dio.get(url, return await _dio.get(url,
queryParameters: queryParameters, queryParameters: queryParameters,
options: Options( options: Options(
headers: getHeader(request: request), responseType: responseType)); receiveTimeout: receiveTimeout,
headers: getHeader(request: request),
responseType: responseType));
} }
// 发起 POST 请求 // 发起 POST 请求
Future<Response> post(String url, Future<Response> post(String url,
{Object? data, {Object? data,
Map<String, dynamic>? queryParameters, Map<String, dynamic>? queryParameters,
sf.Request? request}) async { sf.Request? request,
Duration? receiveTimeout}) async {
return await _dio.post(url, return await _dio.post(url,
data: data, data: data,
queryParameters: queryParameters, queryParameters: queryParameters,
options: Options(headers: getHeader(request: request))); options: Options(
receiveTimeout: receiveTimeout,
headers: getHeader(request: request)));
} }
// 发起 PUT 请求 // 发起 PUT 请求
Future<Response> put(String url, Future<Response> put(String url,
{Object? data, {Object? data,
Map<String, dynamic>? queryParameters, Map<String, dynamic>? queryParameters,
sf.Request? request}) async { sf.Request? request,
Duration? receiveTimeout}) async {
return await _dio.put(url, return await _dio.put(url,
data: data, data: data,
queryParameters: queryParameters, queryParameters: queryParameters,
options: Options(headers: getHeader(request: request))); options: Options(
receiveTimeout: receiveTimeout,
headers: getHeader(request: request)));
} }
// 发起 DELETE 请求 // 发起 DELETE 请求
Future<Response> delete(String url, Future<Response> delete(String url,
{Object? data, {Object? data,
Map<String, dynamic>? queryParameters, Map<String, dynamic>? queryParameters,
sf.Request? request}) async { sf.Request? request,
Duration? receiveTimeout}) async {
return await _dio.delete( return await _dio.delete(
url, url,
data: data, data: data,
queryParameters: queryParameters, queryParameters: queryParameters,
options: Options(headers: getHeader(request: request)), options: Options(
receiveTimeout: receiveTimeout,
headers: getHeader(request: request)),
); );
} }
} }

View File

@@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:mqtt5_client/mqtt5_client.dart'; import 'package:mqtt5_client/mqtt5_client.dart';
import 'package:mqtt5_client/mqtt5_server_client.dart'; import 'package:mqtt5_client/mqtt5_server_client.dart';
@@ -28,8 +30,9 @@ class Mqtt {
await _client?.connect(_config.username, _config.password); await _client?.connect(_config.username, _config.password);
_client?.updates.listen((List<MqttReceivedMessage<MqttMessage>> message) { _client?.updates.listen((List<MqttReceivedMessage<MqttMessage>> message) {
final recMess = message[0].payload as MqttPublishMessage; final recMess = message[0].payload as MqttPublishMessage;
final payload = final payload = Utf8Decoder().convert(recMess.payload.message!);
MqttUtilities.bytesToStringAsString(recMess.payload.message!); // final payload =
// MqttUtilities.bytesToStringAsString(recMess.payload.message!);
_config.messgae(message[0].topic!, payload); _config.messgae(message[0].topic!, payload);
}); });
_config.topic?.forEach((topic) { _config.topic?.forEach((topic) {
@@ -54,7 +57,7 @@ class Mqtt {
void publish(String topic, String msg, {int qos = 0}) { void publish(String topic, String msg, {int qos = 0}) {
var payload = MqttPayloadBuilder(); var payload = MqttPayloadBuilder();
payload.addString(msg); payload.addUTF8String(msg);
_client?.publishMessage( _client?.publishMessage(
topic, MqttUtilities.getQosLevel(qos), payload.payload!); topic, MqttUtilities.getQosLevel(qos), payload.payload!);
} }