Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit 31c6159

Browse files
committed
filters refactored
1 parent 9adb625 commit 31c6159

File tree

2 files changed

+36
-66
lines changed

2 files changed

+36
-66
lines changed

httprpc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
return;
5353
}
5454
self.handlers.forEach(function (handler) {
55-
handler.call(self, {_event: "messages", data: id});
55+
handler.call(self, {_event: payload.call, _id: id, data: parsed.result});
5656
});
5757
});
5858
};

main.js

Lines changed: 35 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@
110110
return [
111111
{ name: 'newFilter', call: newFilter },
112112
{ name: 'uninstallFilter', call: 'uninstallFilter' },
113-
{ name: 'changed', call: 'changed' },
114113
{ name: 'getMessages', call: 'getMessages' }
115114
];
116115
};
@@ -119,7 +118,6 @@
119118
return [
120119
{ name: 'newFilter', call: 'shhNewFilter' },
121120
{ name: 'uninstallFilter', call: 'shhUninstallFilter' },
122-
{ name: 'changed', call: 'shhChanged' },
123121
{ name: 'getMessage', call: 'shhGetMessages' }
124122
];
125123
};
@@ -213,15 +211,10 @@
213211
},
214212

215213
fromAscii: function(str, pad) {
216-
if(pad === undefined) {
217-
pad = 32
218-
}
219-
214+
pad = pad === undefined ? 32 : pad;
220215
var hex = this.toHex(str);
221-
222216
while(hex.length < pad*2)
223217
hex += "00";
224-
225218
return hex
226219
},
227220

@@ -243,42 +236,30 @@
243236
}
244237
},
245238

246-
on: function(event, cb) {
239+
on: function(event, id, cb) {
247240
if(web3._events[event] === undefined) {
248-
web3._events[event] = [];
241+
web3._events[event] = {};
249242
}
250243

251-
web3._events[event].push(cb);
252-
244+
web3._events[event][id] = cb;
253245
return this
254246
},
255247

256-
off: function(event, cb) {
248+
off: function(event, id) {
257249
if(web3._events[event] !== undefined) {
258-
var callbacks = web3._events[event];
259-
for(var i = 0; i < callbacks.length; i++) {
260-
if(callbacks[i] === cb) {
261-
delete callbacks[i];
262-
}
263-
}
250+
delete web3._events[event][id];
264251
}
265252

266253
return this
267254
},
268255

269-
trigger: function(event, data) {
256+
trigger: function(event, id, data) {
270257
var callbacks = web3._events[event];
271-
if(callbacks !== undefined) {
272-
for(var i = 0; i < callbacks.length; i++) {
273-
// Figure out whether the returned data was an array
274-
// array means multiple return arguments (multiple params)
275-
if(data instanceof Array) {
276-
callbacks[i].apply(this, data);
277-
} else {
278-
callbacks[i].call(this, undefined, data);
279-
}
280-
}
258+
if (!callbacks || !callbacks[id]) {
259+
return;
281260
}
261+
var cb = callbacks[id];
262+
cb(data);
282263
},
283264
};
284265

@@ -288,9 +269,13 @@
288269
setupMethods(web3.db, dbMethods());
289270
setupMethods(web3.shh, shhMethods());
290271

291-
var ethWatch = {};
272+
var ethWatch = {
273+
changed: 'changed'
274+
};
292275
setupMethods(ethWatch, ethWatchMethods());
293-
var shhWatch = {};
276+
var shhWatch = {
277+
changed: 'shhChanged'
278+
};
294279
setupMethods(shhWatch, shhWatchMethods());
295280

296281
var ProviderManager = function() {
@@ -316,14 +301,11 @@
316301

317302
ProviderManager.prototype.send = function(data, cb) {
318303
data._id = this.id;
319-
if(cb) {
304+
if (cb) {
320305
web3._callbacks[data._id] = cb;
321306
}
322307

323-
if(data.args === undefined) {
324-
data.args = [];
325-
}
326-
308+
data.args = data.args || [];
327309
this.id++;
328310

329311
if(this.provider !== undefined) {
@@ -378,18 +360,16 @@
378360
web3.provider.sendQueued();
379361
};
380362

381-
var filters = [];
382363
var Filter = function(options, impl) {
383-
filters.push(this);
384-
385364
this.impl = impl;
386365
this.callbacks = [];
387366

388-
var self = this; // Cheaper than binding
367+
var self = this;
389368
this.promise = impl.newFilter(options);
390369
this.promise.then(function (id) {
391370
self.id = id;
392-
web3.provider.startPolling({call: 'changed', args: [id]}, id);
371+
web3.on(impl.changed, id, self.trigger.bind(self));
372+
web3.provider.startPolling({call: impl.changed, args: [id]}, id);
393373
});
394374
};
395375

@@ -400,11 +380,9 @@
400380
});
401381
};
402382

403-
Filter.prototype.trigger = function(messages, id) {
404-
if(id == this.id) {
405-
for(var i = 0; i < this.callbacks.length; i++) {
406-
this.callbacks[i].call(this, messages);
407-
}
383+
Filter.prototype.trigger = function(messages) {
384+
for(var i = 0; i < this.callbacks.length; i++) {
385+
this.callbacks[i].call(this, messages);
408386
}
409387
};
410388

@@ -413,6 +391,7 @@
413391
this.promise.then(function (id) {
414392
self.impl.uninstallFilter(id);
415393
web3.provider.stopPolling(id);
394+
web3.off(impl.changed, id);
416395
});
417396
};
418397

@@ -423,26 +402,17 @@
423402
});
424403
};
425404

426-
// Register to the messages callback. "messages" will be emitted when new messages
427-
// from the client have been created.
428-
web3.on("messages", function(messages, id) {
429-
for(var i = 0; i < filters.length; i++) {
430-
filters[i].trigger(messages, id);
431-
}
432-
});
433-
434405
function messageHandler(data) {
435406
if(data._event !== undefined) {
436-
web3.trigger(data._event, data.data);
437-
} else {
438-
if(data._id) {
439-
var cb = web3._callbacks[data._id];
440-
if(cb) {
441-
cb.call(this, data.data)
442-
443-
// Remove the "trigger" callback
444-
delete web3._callbacks[data._id];
445-
}
407+
web3.trigger(data._event, data._id, data.data);
408+
return;
409+
}
410+
411+
if(data._id) {
412+
var cb = web3._callbacks[data._id];
413+
if (cb) {
414+
cb.call(this, data.data)
415+
delete web3._callbacks[data._id];
446416
}
447417
}
448418
}

0 commit comments

Comments
 (0)