支持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

@@ -12,7 +12,7 @@ import 'package:EasyDartModule/base/redis/redis.dart';
import 'package:EasyDartModule/base/storage/Storage.dart'; import 'package:EasyDartModule/base/storage/Storage.dart';
import 'package:EasyDartModule/base/storage/impl/MinIoStorage.dart'; import 'package:EasyDartModule/base/storage/impl/MinIoStorage.dart';
import 'package:EasyDartModule/base/webserver/WebServer.dart'; import 'package:EasyDartModule/base/webserver/WebServer.dart';
import 'package:EasyDartModule/base/webserver/impl/ShelfWebServer.dart'; import 'package:EasyDartModule/base/webserver/impl/ShelfWebServer.dart' if (dart.library.html) 'package:EasyDartModule/base/webserver/impl/ShelfWebServer_none.dart';
export 'package:shelf/shelf.dart'; export 'package:shelf/shelf.dart';
export 'package:mongo_dart/mongo_dart.dart'; export 'package:mongo_dart/mongo_dart.dart';

View File

@@ -52,8 +52,8 @@ class TraceDio {
}, },
onError: (DioException e, handler) { onError: (DioException e, handler) {
// 记录错误日志 // 记录错误日志
String? traceId = e.response?.headers.value('X-Trace-ID'); String? traceId = e.requestOptions.headers['X-Trace-ID'];
String? spanId = e.response?.headers.value('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); // 继续处理错误

View File

@@ -22,5 +22,7 @@ abstract class Logger {
class LoggerConfig { class LoggerConfig {
String host; String host;
String serviceName; 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; final Dio dio;
LoggerLevel level = LoggerLevel.info; LoggerLevel level = LoggerLevel.info;
LokiLogger(this._config) LokiLogger(this._config)
: dio = Dio(BaseOptions( : dio = Dio(
baseUrl: _config == null ? "" : _config.host, BaseOptions(baseUrl: _config == null ? "" : _config.host, headers: {
headers: { "Content-Type": "application/json",
"Content-Type": "application/json", if (!identical(0, 0.0)) "Content-Encoding": "gzip"
"Content-Encoding": "gzip" }));
}));
@override @override
void debug(String msg, void debug(String msg,
{String? tag, String? traceId, String? spanId, String? parentSpanId}) { {String? tag, String? traceId, String? spanId, String? parentSpanId}) {
@@ -91,7 +90,7 @@ class LokiLogger implements Logger {
var now = DateTime.now(); var now = DateTime.now();
// 转换为纳秒 // 转换为纳秒
int nanoseconds = now.microsecondsSinceEpoch * 1000; int nanoseconds = now.microsecondsSinceEpoch * 1000;
var zip = gzip.encode(utf8.encode(jsonEncode({ var data = jsonEncode({
"streams": [ "streams": [
{ {
"stream": { "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); print(log);
} }
} }

View File

@@ -1,3 +1,5 @@
import 'dart:io';
abstract class WebServer { abstract class WebServer {
static late WebServer _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 { class RequestMapping {
final HttpMethod method; final HttpMethod method;
final String path; 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"); // 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并解码传入 //从request中获取token并解码传入
String? token = req.headers["token"]; String? token = req.headers["token"];
dynamic payload; dynamic payload;
@@ -205,7 +205,19 @@ class ShelfWebServer implements WebServer {
} else { } else {
args = [req]; 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未找到");
}
}
}