33import { BinaryReader } from '@furyjs/fury/dist/lib/reader' ;
44
55import {
6- StreamPacketDecoder ,
7- createStreamPacket ,
8- kMagicNumber ,
9- } from '../../src/common/connection/drivers/stream-decoder' ;
10-
11- const reader = BinaryReader ( { } ) ;
6+ LengthFieldBasedFrameDecoder ,
7+ indicator ,
8+ prependLengthField ,
9+ } from '../../src/common/connection/drivers/frame-decoder' ;
1210
1311function round ( x : number , count : number ) {
1412 return Math . round ( x * 10 ** count ) / 10 ** count ;
@@ -42,14 +40,7 @@ console.timeEnd('createPayload');
4240// 1m
4341const pressure = 1024 * 1024 ;
4442
45- const purePackets = [ p1k , p64k , p128k , p5m , p10m ] . map ( ( v ) => [ createStreamPacket ( v ) , v ] as const ) ;
46-
47- const mixedPackets = [ p1m , p5m ] . map ( ( v ) => {
48- const sumiPacket = createStreamPacket ( v ) ;
49- const newPacket = createPayload ( 1024 + sumiPacket . byteLength ) ;
50- newPacket . set ( sumiPacket , 1024 ) ;
51- return [ newPacket , v ] as const ;
52- } ) ;
43+ const purePackets = [ p1k , p64k , p128k , p5m , p10m ] . map ( ( v ) => [ prependLengthField ( v ) , v ] as const ) ;
5344
5445const size = purePackets . reduce ( ( acc , v ) => acc + v [ 0 ] . byteLength , 0 ) ;
5546
@@ -61,22 +52,30 @@ purePackets.forEach((v) => {
6152 offset += sumiPacket . byteLength ;
6253} ) ;
6354
55+ const mixedPackets = [ p1m , p5m ] . map ( ( v ) => {
56+ const sumiPacket = prependLengthField ( v ) ;
57+ const newPacket = createPayload ( 1024 + sumiPacket . byteLength ) ;
58+ newPacket . set ( sumiPacket , 1024 ) ;
59+ return [ newPacket , v ] as const ;
60+ } ) ;
61+
6462const packets = [ ...purePackets , ...mixedPackets ] ;
6563
66- describe ( 'stream-packet ' , ( ) => {
67- it ( 'can create sumi stream packet ' , ( ) => {
64+ describe ( 'frame decoder ' , ( ) => {
65+ it ( 'can create frame ' , ( ) => {
6866 const content = new Uint8Array ( [ 1 , 2 , 3 ] ) ;
69- const packet = createStreamPacket ( content ) ;
67+ const packet = prependLengthField ( content ) ;
68+ const reader = BinaryReader ( { } ) ;
7069
7170 reader . reset ( packet ) ;
72- expect ( reader . uint32 ( ) ) . toBe ( kMagicNumber ) ;
73- expect ( reader . varUInt32 ( ) ) . toBe ( content . byteLength ) ;
71+ expect ( Uint8Array . from ( reader . buffer ( 4 ) ) ) . toEqual ( indicator ) ;
72+ expect ( reader . uint32 ( ) ) . toBe ( content . byteLength ) ;
7473 expect ( Uint8Array . from ( reader . buffer ( content . byteLength ) ) ) . toEqual ( content ) ;
7574 } ) ;
7675
7776 packets . forEach ( ( [ packet , expected ] ) => {
78- it ( `can decode stream packet : ${ round ( packet . byteLength / 1024 / 1024 , 2 ) } m` , ( done ) => {
79- const decoder = new StreamPacketDecoder ( ) ;
77+ it ( `can decode stream: ${ round ( packet . byteLength / 1024 / 1024 , 2 ) } m` , ( done ) => {
78+ const decoder = new LengthFieldBasedFrameDecoder ( ) ;
8079
8180 decoder . onData ( ( data ) => {
8281 fastExpectBufferEqual ( data , expected ) ;
@@ -95,8 +94,8 @@ describe('stream-packet', () => {
9594 } ) ;
9695 } ) ;
9796
98- it ( 'can decode a stream payload contains multiple packets ' , ( done ) => {
99- const decoder = new StreamPacketDecoder ( ) ;
97+ it ( 'can decode a stream payload contains multiple frames ' , ( done ) => {
98+ const decoder = new LengthFieldBasedFrameDecoder ( ) ;
10099 const expectCount = purePackets . length ;
101100 let count = 0 ;
102101 decoder . onData ( ( data ) => {
@@ -120,18 +119,17 @@ describe('stream-packet', () => {
120119 logMemoryUsage ( ) ;
121120 } ) ;
122121
123- it ( 'can decode a stream it header and payload are separated ' , ( done ) => {
122+ it ( 'can decode a stream it has no valid length info ' , ( done ) => {
124123 const v = createPayload ( 1024 ) ;
125- const sumiPacket = createStreamPacket ( v ) ;
124+ const sumiPacket = prependLengthField ( v ) ;
126125
127- const decoder = new StreamPacketDecoder ( ) ;
126+ const decoder = new LengthFieldBasedFrameDecoder ( ) ;
128127 decoder . onData ( ( data ) => {
129128 fastExpectBufferEqual ( data , v ) ;
130129 done ( ) ;
131130 } ) ;
132131
133132 console . log ( 'write chunk' , sumiPacket . byteLength ) ;
134-
135133 // use pressure = 2 to simulate the header and payload are separated
136134 const pressure = 2 ;
137135 for ( let i = 0 ; i < sumiPacket . byteLength ; i += pressure ) {
0 commit comments