支持flutter调用

This commit is contained in:
2025-01-15 09:55:42 +08:00
parent 234d8ea7ca
commit 0fee2d7f69
7 changed files with 88 additions and 17 deletions

View File

@@ -52,8 +52,8 @@ class TraceDio {
},
onError: (DioException e, handler) {
// 记录错误日志
String? traceId = e.response?.headers.value('X-Trace-ID');
String? spanId = e.response?.headers.value('X-Span-ID');
String? traceId = e.requestOptions.headers['X-Trace-ID'];
String? spanId = e.requestOptions.headers['X-Span-ID'];
_logger.error('Request failed: ${e.message}',
tag: "DIO", traceId: traceId, spanId: spanId);
return handler.next(e); // 继续处理错误

View File

@@ -22,5 +22,7 @@ abstract class Logger {
class LoggerConfig {
String host;
String serviceName;
LoggerConfig({required this.host, required this.serviceName});
bool print;
LoggerConfig(
{required this.host, required this.serviceName, this.print = false});
}

View File

@@ -21,12 +21,11 @@ class LokiLogger implements Logger {
final Dio dio;
LoggerLevel level = LoggerLevel.info;
LokiLogger(this._config)
: dio = Dio(BaseOptions(
baseUrl: _config == null ? "" : _config.host,
headers: {
"Content-Type": "application/json",
"Content-Encoding": "gzip"
}));
: dio = Dio(
BaseOptions(baseUrl: _config == null ? "" : _config.host, headers: {
"Content-Type": "application/json",
if (!identical(0, 0.0)) "Content-Encoding": "gzip"
}));
@override
void debug(String msg,
{String? tag, String? traceId, String? spanId, String? parentSpanId}) {
@@ -91,7 +90,7 @@ class LokiLogger implements Logger {
var now = DateTime.now();
// 转换为纳秒
int nanoseconds = now.microsecondsSinceEpoch * 1000;
var zip = gzip.encode(utf8.encode(jsonEncode({
var data = jsonEncode({
"streams": [
{
"stream": {
@@ -105,9 +104,15 @@ class LokiLogger implements Logger {
]
}
]
})));
dio.post("/loki/api/v1/push", data: zip);
if (level == LoggerLevel.debug) {
});
//判断平台
if (identical(0, 0.0)) {
dio.post("/loki/api/v1/push", data: data);
} else {
var zip = gzip.encode(utf8.encode(data));
dio.post("/loki/api/v1/push", data: zip);
}
if (level == LoggerLevel.debug || _config.print) {
print(log);
}
}

View File

@@ -1,3 +1,5 @@
import 'dart:io';
abstract class WebServer {
static late WebServer _webServer;
@@ -24,9 +26,26 @@ enum HttpMethod {
;
}
enum HttpResponseType {
HTML("text/html; charset=utf-8"),
TEXT("text/plain; charset=utf-8"),
XML("text/xml; charset=utf-8"),
JSON("application/json; charset=utf-8"),
BINARY("application/octet-stream"),
;
final String type;
const HttpResponseType(this.type);
}
class RequestMapping {
final HttpMethod method;
final String path;
final HttpResponseType responseType;
const RequestMapping({this.method = HttpMethod.ALL, required this.path});
const RequestMapping(
{this.method = HttpMethod.ALL,
required this.path,
this.responseType = HttpResponseType.JSON});
}

View File

@@ -187,7 +187,7 @@ class ShelfWebServer implements WebServer {
// print("method: ${m.reflectee.method} $p");
//把地址加入路由
addRouter(m.reflectee.method, p, (req, [a, b, c, d, e, f]) {
addRouter(m.reflectee.method, p, (req, [a, b, c, d, e, f]) async {
//从request中获取token并解码传入
String? token = req.headers["token"];
dynamic payload;
@@ -205,7 +205,19 @@ class ShelfWebServer implements WebServer {
} else {
args = [req];
}
return im.invoke(v.simpleName, args).reflectee;
Response response = await im.invoke(v.simpleName, args).reflectee as Response;
//判断contenttype是否定义
var t = response.headers["content-type"];
if (t == null) {
//设置默认contenttype
response = response.change(headers: {
...response.headers,
"content-type": m.reflectee.responseType.type
});
}
return response;
});
}
}

View File

@@ -0,0 +1,33 @@
import 'package:EasyDartModule/base/logger/Logger.dart';
import 'package:EasyDartModule/base/webserver/WebServer.dart';
class ShelfWebServer implements WebServer {
late Logger logger;
final String tag = "webserver";
ShelfWebServer(this.logger);
@override
void start(int port) async {}
@override
void stop() {}
@override
void addHandler(handler) {}
void addRouter(HttpMethod method, String path, dynamic handler) {}
}
abstract class WebSocketHandler {
Map<String, dynamic> chanelMap = {};
void open(String id);
void close(String id);
void message(String id, dynamic message);
void sendData(String id, dynamic data) {
if (chanelMap.containsKey(id)) {
chanelMap[id].sink.add(data);
} else {
print("id未找到");
}
}
}