You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					93 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					93 lines
				
				2.1 KiB
			| 
											2 years ago
										 | var Seq = require('seq'); | ||
|  | var Hash = require('hashish'); | ||
|  | var EventEmitter = require('events').EventEmitter; | ||
|  | 
 | ||
|  | var Bin = require('binary'); | ||
|  | var Buf = require('bufferlist/binary'); | ||
|  | var BufferList = require('bufferlist'); | ||
|  | 
 | ||
|  | console.log('loop'); | ||
|  | function emitter () { | ||
|  |     var em = new EventEmitter; | ||
|  |      | ||
|  |     var i = 0; | ||
|  |     var iv = setInterval(function () { | ||
|  |         var buf = new Buffer(10000); | ||
|  |         buf[0] = 0xff; | ||
|  |          | ||
|  |         if (++ i >= 2000) { | ||
|  |             buf[0] = 0; | ||
|  |             clearInterval(iv); | ||
|  |         } | ||
|  |         em.emit('data', buf); | ||
|  |     }, 1); | ||
|  |      | ||
|  |     return em; | ||
|  | } | ||
|  | 
 | ||
|  | Seq() | ||
|  |     .seq(function () { | ||
|  |         var next = this.bind({}, null); | ||
|  |         bufferlist(next); | ||
|  |     }) | ||
|  |     .seq(function () { | ||
|  |         var next = this.bind({}, null); | ||
|  |         binary(next); | ||
|  |     }) | ||
|  | ; | ||
|  | 
 | ||
|  | function binary (next) { | ||
|  |     var em = emitter(); | ||
|  |     var t0 = Date.now(); | ||
|  |      | ||
|  |     Bin(em) | ||
|  |         .loop(function (end) { | ||
|  |             this | ||
|  |             .word8('x') | ||
|  |             .word8('y') | ||
|  |             .word32be('z') | ||
|  |             .word32le('w') | ||
|  |             .buffer('buf', 10000 - 10) | ||
|  |             .tap(function (vars) { | ||
|  |                 if (vars.x === 0) { | ||
|  |                     var tf = Date.now(); | ||
|  |                     console.log('    binary: ' + (tf - t0) + ' ms'); | ||
|  |                     end(); | ||
|  |                     setTimeout(next, 20); | ||
|  |                 } | ||
|  |             }) | ||
|  |         }) | ||
|  |     ; | ||
|  | } | ||
|  | 
 | ||
|  | function bufferlist (next) { | ||
|  |     var em = emitter(); | ||
|  |     var t0 = Date.now(); | ||
|  |      | ||
|  |     var blist = new BufferList; | ||
|  |     em.on('data', function (buf) { | ||
|  |         blist.push(buf); | ||
|  |     }); | ||
|  |      | ||
|  |     Buf(blist) | ||
|  |         .forever(function () { | ||
|  |             var top = this; | ||
|  |             this | ||
|  |             .getWord8('x') | ||
|  |             .getWord8('y') | ||
|  |             .getWord32be('z') | ||
|  |             .getWord32le('w') | ||
|  |             .getBuffer('buf', 10000 - 10) | ||
|  |             .tap(function (vars) { | ||
|  |                 if (vars.x === 0) { | ||
|  |                     var tf = Date.now(); | ||
|  |                     console.log('    bufferlist: ' + (tf - t0) + ' ms'); | ||
|  |                     top.exit(); | ||
|  |                     setTimeout(next, 20); | ||
|  |                 } | ||
|  |             }) | ||
|  |         }) | ||
|  |         .end() | ||
|  |     ; | ||
|  | } |