rpc.txt 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. library fis_jsonrpc;
  2. import 'dart:collection';
  3. import 'dart:convert';
  4. import 'package:fis_common/extensions/type.dart';
  5. import 'package:fis_common/logger/logger.dart';
  6. import 'package:fis_jsonrpc/encrpyt.dart';
  7. import 'client_base.dart';
  8. import 'interceptor.dart';
  9. import 'services/index.dart';
  10. export 'services/index.dart';
  11. export 'request.dart';
  12. export 'exception.dart';
  13. export 'interceptor.dart';
  14. export 'notifications/index.dart';
  15. typedef T ServiceBuilder<T extends JsonRpcClientBase>();
  16. const C_SHELL_RPC_DEFAULT_HOST = 'platform.fis.plus';
  17. /// JSON-RPC 代理
  18. class JsonRpcProxy {
  19. JsonRpcProxy({
  20. String? host,
  21. this.platformHost = C_SHELL_RPC_DEFAULT_HOST,
  22. }) {
  23. _currentHost = host ?? "unknown";
  24. }
  25. /// 宿主平台代理地址
  26. final String platformHost;
  27. /// 服务主机地址
  28. late String _currentHost;
  29. /// 服务主机协议
  30. late String _currentProtocol;
  31. /// 当前服务主机地址
  32. String get currentHostAddress => "$_currentProtocol://$_currentHost";
  33. HashMap<Type, dynamic> _serviceCache = HashMap();
  34. static PlatformService? _platformService;
  35. /// 请求加密配置
  36. JsonRpcEncryptConfig get requestEncryptConfig =>
  37. JsonRpcClientBase.requestEncryptConfig;
  38. set requestEncryptConfig(JsonRpcEncryptConfig config) {
  39. JsonRpcClientBase.requestEncryptConfig = config;
  40. final cfgJson = jsonEncode(config.toJson());
  41. logger.i("JsonRpcProxy - set RequestEncryptConfig: $cfgJson.");
  42. }
  43. /// 响应加密配置
  44. JsonRpcEncryptConfig get responseEncryptConfig =>
  45. JsonRpcClientBase.responseEncryptConfig;
  46. set responseEncryptConfig(JsonRpcEncryptConfig config) {
  47. JsonRpcClientBase.responseEncryptConfig = config;
  48. final cfgJson = jsonEncode(config.toJson());
  49. logger.i("JsonRpcProxy - set ResponseEncryptConfig: $cfgJson.");
  50. }
  51. /* 服务代理设置 Start */
  52. /// 平台服务
  53. PlatformService get platform {
  54. if (_platformService == null)
  55. _platformService = PlatformService("http://$platformHost", timeout: 15000);
  56. return _platformService!;
  57. }
  58. *******Separator******
  59. /* 服务代理设置 End */
  60. /// 设置服务主机地址
  61. void setServerHost(String address, [bool useSSL = false]) {
  62. logger.i('JsonRpcProxy setServerHost :' + address);
  63. _currentProtocol = useSSL ? "https" : "http";
  64. _currentHost = address;
  65. }
  66. /// 添加拦截器
  67. void addInterceptor(JsonRpcInterceptor interceptor) =>
  68. jsonRpcInterceptHost.addInterceptor(interceptor);
  69. /// 清空缓存
  70. void clearCache() => _serviceCache.clear();
  71. /// 查找Service实例
  72. T findService<T extends JsonRpcClientBase>(ServiceBuilder<T> builder) {
  73. Type serviceType = typeOf<T>();
  74. if (!_serviceCache.containsKey(serviceType)) {
  75. _serviceCache[serviceType] = builder.call();
  76. }
  77. return _serviceCache[serviceType] as T;
  78. }
  79. }