rpcForUSMachine.txt 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import 'dart:collection';
  2. import 'package:fis_common/extensions/type.dart';
  3. import 'package:fis_common/logger/logger.dart';
  4. import 'package:fis_jsonrpc/client_base.dart';
  5. import 'package:fis_jsonrpc/interceptor.dart';
  6. import 'package:flyinsonolite/fisLib/services/index.dart';
  7. typedef T ServiceBuilder<T extends JsonRpcClientBase>();
  8. const C_SHELL_RPC_DEFAULT_HOST = 'platform.fis.plus';
  9. /// JSON-RPC 代理
  10. class JsonRpcProxyForFISLib {
  11. JsonRpcProxyForFISLib({
  12. String? host,
  13. this.platformHost = C_SHELL_RPC_DEFAULT_HOST,
  14. }) {
  15. _currentHost = host ?? "unknown";
  16. }
  17. /// 宿主平台代理地址
  18. final String platformHost;
  19. /// 服务主机地址
  20. late String _currentHost;
  21. /// 服务主机协议
  22. late String _currentProtocol;
  23. /// 当前服务主机地址
  24. String get currentHostAddress => "$_currentProtocol://$_currentHost";
  25. HashMap<Type, dynamic> _serviceCache = HashMap();
  26. /* 服务代理设置 Start */
  27. /// 平台服务
  28. *******Separator******
  29. /* 服务代理设置 End */
  30. /// 设置服务主机地址
  31. void setServerHost(String address, [bool useSSL = false]) {
  32. logger.i('JsonRpcProxyForFISLib setServerHost :' + address);
  33. _currentProtocol = useSSL ? "https" : "http";
  34. _currentHost = address;
  35. }
  36. /// 添加拦截器
  37. void addInterceptor(JsonRpcInterceptor interceptor) =>
  38. jsonRpcInterceptHost.addInterceptor(interceptor);
  39. /// 清空缓存
  40. void clearCache() => _serviceCache.clear();
  41. /// 查找Service实例
  42. T findService<T extends JsonRpcClientBase>(ServiceBuilder<T> builder) {
  43. Type serviceType = typeOf<T>();
  44. if (!_serviceCache.containsKey(serviceType)) {
  45. _serviceCache[serviceType] = builder.call();
  46. }
  47. return _serviceCache[serviceType] as T;
  48. }
  49. }