@@ -9,6 +9,22 @@ export 'transports/NativeTransport.dart'
99
1010final logger = new Logger ('Peer' );
1111
12+ class SentObject {
13+ final int id;
14+ final String method;
15+ final Function (dynamic ) resolve;
16+ final Function (dynamic ) reject;
17+ final Timer timer;
18+ final Function () close;
19+ SentObject (
20+ {required this .id,
21+ required this .method,
22+ required this .resolve,
23+ required this .reject,
24+ required this .timer,
25+ required this .close});
26+ }
27+
1228class Peer extends EnhancedEventEmitter {
1329 // Closed flag.
1430 bool _closed = false ;
@@ -20,7 +36,7 @@ class Peer extends EnhancedEventEmitter {
2036 dynamic _data = {};
2137
2238 // Map of pending sent request objects indexed by request id.
23- var _sents = Map <String , dynamic >();
39+ var _sents = Map <String , SentObject >();
2440
2541 // Transport.
2642 late TransportInterface _transport;
@@ -72,33 +88,29 @@ class Peer extends EnhancedEventEmitter {
7288 await this ._transport.send (request);
7389
7490 int timeout = (1500 * (15 + (0.1 * this ._sents.length))).toInt ();
75- final sent = {
76- 'id' : request['id' ],
77- 'method' : request['method' ],
78- 'resolve' : (data2) {
79- final sent = _sents.remove (requestId);
80- if (sent == null ) return ;
81- sent['timer' ].cancel ();
82- completer.complete (data2);
83- },
84- 'reject' : (error) {
85- final sent = _sents.remove (requestId);
86- if (sent == null ) return ;
87- sent['timer' ].cancel ();
88- completer.completeError (error);
89- },
90- 'timer' : new Timer .periodic (new Duration (milliseconds: timeout),
91- (Timer timer) {
92- if (this ._sents.remove (requestId) == null ) return ;
93-
94- completer.completeError ('request timeout' );
95- }),
96- 'close' : () {
97- var handler = _sents[requestId];
98- handler['timer' ].cancel ();
99- completer.completeError ('peer closed' );
100- }
101- };
91+ final sent = SentObject (
92+ id: request['id' ],
93+ method: request['method' ],
94+ resolve: (data2) {
95+ final sent = _sents.remove (requestId);
96+ sent? .timer.cancel ();
97+ completer.complete (data2);
98+ },
99+ reject: (error) {
100+ final sent = _sents.remove (requestId);
101+ sent? .timer.cancel ();
102+ completer.completeError (error);
103+ },
104+ timer: new Timer .periodic (new Duration (milliseconds: timeout),
105+ (Timer timer) {
106+ if (this ._sents.remove (requestId) == null ) return ;
107+ completer.completeError ('request timeout' );
108+ }),
109+ close: () {
110+ final sent = _sents[requestId];
111+ sent? .timer.cancel ();
112+ completer.completeError ('peer closed' );
113+ });
102114
103115 _sents[requestId] = sent;
104116 return completer.future;
@@ -215,15 +227,13 @@ class Peer extends EnhancedEventEmitter {
215227 }
216228
217229 if (response['ok' ] != null && response['ok' ] == true ) {
218- var resolve = sent['resolve' ];
219- resolve (response['data' ]);
230+ sent.resolve (response['data' ]);
220231 } else {
221232 var error = {
222233 'code' : response['errorCode' ] ?? 500 ,
223234 'error' : response['errorReason' ] ?? ''
224235 };
225- var reject = sent['reject' ];
226- reject (error);
236+ sent.reject (error);
227237 }
228238 }
229239
0 commit comments