interceptor.dart 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import 'package:fis_jsonrpc/request.dart';
  2. import 'exception.dart';
  3. abstract class JsonRpcInterceptor {
  4. Future<JsonRpcRequest> onRequestTransmit(JsonRpcRequest request) async {
  5. return request;
  6. }
  7. Future<Map<String, dynamic>> onResponse(Map<String, dynamic> response) async {
  8. return response;
  9. }
  10. Future<dynamic> onResponseResult(dynamic result) async {
  11. return result;
  12. }
  13. Future<JsonRpcServerError> onResponseError(JsonRpcServerError error) async {
  14. return error;
  15. }
  16. }
  17. class _JsonRpcInterceptHost implements JsonRpcInterceptor {
  18. final _interceptors = <JsonRpcInterceptor>[];
  19. void addInterceptor(JsonRpcInterceptor interceptor) {
  20. _interceptors.add(interceptor);
  21. }
  22. @override
  23. Future<JsonRpcRequest> onRequestTransmit(JsonRpcRequest request) async {
  24. var pipeVal = request;
  25. for (var interceptor in _interceptors) {
  26. pipeVal = await interceptor.onRequestTransmit(pipeVal);
  27. }
  28. return pipeVal;
  29. }
  30. @override
  31. Future<Map<String, dynamic>> onResponse(Map<String, dynamic> response) async {
  32. var pipeVal = response;
  33. for (var interceptor in _interceptors) {
  34. pipeVal = await interceptor.onResponse(pipeVal);
  35. }
  36. return pipeVal;
  37. }
  38. @override
  39. Future<JsonRpcServerError> onResponseError(JsonRpcServerError error) async {
  40. var pipeVal = error;
  41. for (var interceptor in _interceptors) {
  42. pipeVal = await interceptor.onResponseError(pipeVal);
  43. }
  44. return pipeVal;
  45. }
  46. @override
  47. Future onResponseResult(result) async {
  48. var pipeVal = result;
  49. for (var interceptor in _interceptors) {
  50. pipeVal = await interceptor.onResponseResult(pipeVal);
  51. }
  52. return pipeVal;
  53. }
  54. }
  55. final jsonRpcInterceptHost = _JsonRpcInterceptHost();