@@ -30,20 +30,23 @@ abstract class BasicProvider {
30
30
private final EthHttpClient executor ;
31
31
private final RequestQueueManager queue ;
32
32
private final Converter converter ;
33
+ private final int retryCountLimit ;
33
34
34
35
BasicProvider (RequestQueueManager requestQueueManager ,
35
36
String module ,
36
37
String baseUrl ,
37
38
EthHttpClient ethHttpClient ,
38
- Converter converter ) {
39
+ Converter converter ,
40
+ int retryCountLimit ) {
39
41
this .queue = requestQueueManager ;
40
42
this .module = "&module=" + module ;
41
43
this .baseUrl = baseUrl ;
42
44
this .executor = ethHttpClient ;
43
45
this .converter = converter ;
46
+ this .retryCountLimit = retryCountLimit ;
44
47
}
45
48
46
- <T > T convert (byte [] json , Class <T > tClass ) {
49
+ private <T > T convert (byte [] json , Class <T > tClass ) {
47
50
try {
48
51
final T t = converter .fromJson (json , tClass );
49
52
if (t instanceof StringResponseTO && ((StringResponseTO ) t ).getResult ().startsWith (MAX_RATE_LIMIT_REACHED )) {
@@ -66,23 +69,59 @@ <T> T convert(byte[] json, Class<T> tClass) {
66
69
}
67
70
}
68
71
69
- byte [] getRequest (String urlParameters ) {
72
+ private byte [] getRequest (String urlParameters ) {
70
73
queue .takeTurn ();
71
74
final URI uri = URI .create (baseUrl + module + urlParameters );
72
75
return executor .get (uri );
73
76
}
74
77
75
- byte [] postRequest (String urlParameters , String dataToPost ) {
78
+ private byte [] postRequest (String urlParameters , String dataToPost ) {
76
79
queue .takeTurn ();
77
80
final URI uri = URI .create (baseUrl + module + urlParameters );
78
81
return executor .post (uri , dataToPost .getBytes (StandardCharsets .UTF_8 ));
79
82
}
80
83
81
84
<T > T getRequest (String urlParameters , Class <T > tClass ) {
82
- return convert (getRequest (urlParameters ), tClass );
85
+ return getRequest (urlParameters , tClass , 0 );
86
+ }
87
+
88
+ private <T > T getRequest (String urlParameters , Class <T > tClass , int retryCount ) {
89
+ try {
90
+ return convert (getRequest (urlParameters ), tClass );
91
+ } catch (Exception e ) {
92
+ if (retryCount < retryCountLimit ) {
93
+ try {
94
+ Thread .sleep (1150 );
95
+ } catch (InterruptedException ex ) {
96
+ throw new IllegalStateException (ex );
97
+ }
98
+
99
+ return getRequest (urlParameters , tClass , retryCount + 1 );
100
+ } else {
101
+ throw e ;
102
+ }
103
+ }
83
104
}
84
105
85
106
<T > T postRequest (String urlParameters , String dataToPost , Class <T > tClass ) {
86
- return convert (postRequest (urlParameters , dataToPost ), tClass );
107
+ return postRequest (urlParameters , dataToPost , tClass , 0 );
108
+ }
109
+
110
+ private <T > T postRequest (String urlParameters , String dataToPost , Class <T > tClass , int retryCount ) {
111
+ try {
112
+ return convert (postRequest (urlParameters , dataToPost ), tClass );
113
+ } catch (EtherScanRateLimitException e ) {
114
+ if (retryCount < retryCountLimit ) {
115
+ try {
116
+ Thread .sleep (1150 );
117
+ } catch (InterruptedException ex ) {
118
+ throw new IllegalStateException (ex );
119
+ }
120
+
121
+ return postRequest (urlParameters , dataToPost , tClass , retryCount + 1 );
122
+ } else {
123
+ throw e ;
124
+ }
125
+ }
87
126
}
88
127
}
0 commit comments