rpcForUSMachine.txt 1.8 KB

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