支持flutter调用
This commit is contained in:
@@ -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); // 继续处理错误
|
||||
|
||||
@@ -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});
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
33
lib/base/webserver/impl/ShelfWebServer_none.dart
Normal file
33
lib/base/webserver/impl/ShelfWebServer_none.dart
Normal 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未找到");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user